Commit Graph

24697 Commits

Author SHA1 Message Date
Chris Lattner 1ebbe6a22e Implement simple promotion for cast elimination in instcombine. This is
currently very limited, but can be extended in the future.  For example,
we now compile:

uint %test30(uint %c1) {
        %c2 = cast uint %c1 to ubyte
        %c3 = xor ubyte %c2, 1
        %c4 = cast ubyte %c3 to uint
        ret uint %c4
}

to:

_xor:
        movzbl 4(%esp), %eax
        xorl $1, %eax
        ret

instead of:

_xor:
        movb $1, %al
        xorb 4(%esp), %al
        movzbl %al, %eax
        ret

More impressively, we now compile:

struct B { unsigned bit : 1; };
void xor(struct B *b) { b->bit = b->bit ^ 1; }

To (X86/PPC):

_xor:
        movl 4(%esp), %eax
        xorl $-2147483648, (%eax)
        ret
_xor:
        lwz r2, 0(r3)
        xoris r2, r2, 32768
        stw r2, 0(r3)
        blr

instead of (X86/PPC):

_xor:
        movl 4(%esp), %eax
        movl (%eax), %ecx
        movl %ecx, %edx
        shrl $31, %edx
        # TRUNCATE movb %dl, %dl
        xorb $1, %dl
        movzbl %dl, %edx
        andl $2147483647, %ecx
        shll $31, %edx
        orl %ecx, %edx
        movl %edx, (%eax)
        ret

_xor:
        lwz r2, 0(r3)
        srwi r4, r2, 31
        xori r4, r4, 1
        rlwimi r2, r4, 31, 0, 0
        stw r2, 0(r3)
        blr

This implements InstCombine/cast.ll:test30.

llvm-svn: 28273
2006-05-13 02:06:03 +00:00
Chris Lattner 4edab0f7a7 New testcase for instcombine
llvm-svn: 28272
2006-05-13 02:00:07 +00:00
Chris Lattner cd60d38b30 Remove some dead variables.
Fix a nasty bug in the memcmp optimizer where we used the wrong variable!

llvm-svn: 28269
2006-05-12 23:35:26 +00:00
Chris Lattner 94acc47654 Remove dead stuff
llvm-svn: 28268
2006-05-12 23:32:01 +00:00
Chris Lattner 768bc20b74 Fix build breakage :(
llvm-svn: 28267
2006-05-12 23:26:11 +00:00
Chris Lattner b19ce6c810 More coverity fixes
llvm-svn: 28266
2006-05-12 21:14:20 +00:00
Chris Lattner 22f95b74ba Dead variable
llvm-svn: 28265
2006-05-12 21:12:22 +00:00
Chris Lattner ae48a894b1 Remove dead var, fix bad override.
llvm-svn: 28264
2006-05-12 21:09:57 +00:00
Reid Spencer c220ecfbb9 Don't use old-style casts. This prevents compiler warnings when CommandLine.h
is used in projects that have stricter warning control than LLVM. This also
helps us find casts more easily if we ever need to.

llvm-svn: 28263
2006-05-12 19:20:55 +00:00
Evan Cheng a726fc6dbf If the register allocator cannot find a register to spill, try the aliases. If
that still fails (because all the register spill weights are inf), just grab
one.

llvm-svn: 28262
2006-05-12 19:07:46 +00:00
Evan Cheng db30388d48 Remove dead code
llvm-svn: 28261
2006-05-12 19:03:56 +00:00
Chris Lattner 227d442d01 Fix accidentally committed patch.
llvm-svn: 28260
2006-05-12 18:20:39 +00:00
Chris Lattner d63ec521c5 Actually override the right method. :)
Bug identified by coverity.

llvm-svn: 28259
2006-05-12 18:19:25 +00:00
Chris Lattner 132322b96e remove dead variable.
llvm-svn: 28258
2006-05-12 18:17:25 +00:00
Chris Lattner 1971e8a77b Fix iterator invalidation bug, identified by Coverity.
llvm-svn: 28257
2006-05-12 18:13:11 +00:00
Chris Lattner 1fe2d2c600 Fix a hypothetical memory leak, identified by Coverity. In practice, this
object is never deleted though.

llvm-svn: 28256
2006-05-12 18:10:12 +00:00
Chris Lattner 53cdb2f2b0 Remove dead vars
llvm-svn: 28255
2006-05-12 18:06:45 +00:00
Chris Lattner da076e41ab remove dead vars
llvm-svn: 28254
2006-05-12 18:04:28 +00:00
Chris Lattner fe211deedf Remove dead variable
llvm-svn: 28253
2006-05-12 18:02:04 +00:00
Chris Lattner afe72481f6 Comment out dead variables
llvm-svn: 28252
2006-05-12 17:57:54 +00:00
Reid Spencer 69fb378858 When reading the symbol table, make sure to delete the ArchiveMember
created by reading the symbol table.

llvm-svn: 28251
2006-05-12 17:56:20 +00:00
Chris Lattner 936cd3390d Remove dead var
llvm-svn: 28250
2006-05-12 17:50:35 +00:00
Chris Lattner ce9ac0cdab Remove dead variable
llvm-svn: 28249
2006-05-12 17:41:45 +00:00
Chris Lattner f76c42776d remove dead variable.
llvm-svn: 28248
2006-05-12 17:33:59 +00:00
Chris Lattner 9cd2ef34e6 Remove dead variable.
llvm-svn: 28247
2006-05-12 17:31:21 +00:00
Chris Lattner 36d256f170 Avoid defining dead result
llvm-svn: 28246
2006-05-12 17:29:40 +00:00
Chris Lattner 917f8fd1d9 Remove dead return value.
llvm-svn: 28245
2006-05-12 17:28:36 +00:00
Chris Lattner 8c02c3f41a Compile:
%tmp152 = setgt uint %tmp144, %tmp149           ; <bool> [#uses=1]
        %tmp159 = setlt uint %tmp144, %tmp149           ; <bool> [#uses=1]
        %bothcond2 = or bool %tmp152, %tmp159           ; <bool> [#uses=1]

To setne, not setune, which causes an assertion fault.

llvm-svn: 28244
2006-05-12 17:03:46 +00:00
Chris Lattner a296339c87 Fix PowerPC/2006-05-12-rlwimi-crash.ll
Nate, please verify that if InsertMask is 0, rlwimi shouldn't be used.
This fixes the crash and causes no PPC testsuite regressions.

llvm-svn: 28243
2006-05-12 16:29:37 +00:00
Chris Lattner 6372a2acde new testcase for a recent rlwimi crash.
llvm-svn: 28242
2006-05-12 16:28:13 +00:00
Evan Cheng 21c7c23d7e Noop instruction
llvm-svn: 28241
2006-05-12 07:47:00 +00:00
Evan Cheng e2c1aedc23 Unused instruction
llvm-svn: 28240
2006-05-12 07:42:01 +00:00
Owen Anderson 5fea9f0a93 Add a method to generate a string representation from a TargetData.
This continues the work on PR 761.

llvm-svn: 28239
2006-05-12 07:01:44 +00:00
Owen Anderson 8c2c1e90c4 Refactor a bunch of includes so that TargetMachine.h doesn't have to include
TargetData.h.  This should make recompiles a bit faster with my current
TargetData tinkering.

llvm-svn: 28238
2006-05-12 06:33:49 +00:00
Owen Anderson d7c77b8c56 Fix some tabbing issues.
llvm-svn: 28237
2006-05-12 06:06:55 +00:00
Evan Cheng 6a6886185b Backing out fix for PR770. Need to re-apply it after live range splitting is possible
llvm-svn: 28236
2006-05-12 06:06:34 +00:00
Evan Cheng 095c9d9b7f Duh. That could take a long time.
llvm-svn: 28235
2006-05-12 06:05:18 +00:00
Owen Anderson 8d7774cb1d Add a new constructor to TargetData that builds a TargetData from its
string representation.

This is part of PR 761.

llvm-svn: 28234
2006-05-12 05:49:47 +00:00
Chris Lattner 66adee93aa Two simplifications for token factor nodes: simplify tf(x,x) -> x.
simplify tf(x,y,y,z) -> tf(x,y,z).

llvm-svn: 28233
2006-05-12 05:01:37 +00:00
Evan Cheng 1501b9f829 New scheduling test case.
llvm-svn: 28232
2006-05-12 01:59:17 +00:00
Evan Cheng afed73eebe Add capability to scheduler to commute nodes for profit.
If a two-address code whose first operand has uses below, it should be commuted
when possible.

llvm-svn: 28230
2006-05-12 01:58:24 +00:00
Evan Cheng c30a5558f2 Typo! How did we commute nodes before?!
llvm-svn: 28229
2006-05-12 01:46:26 +00:00
Chris Lattner 22acb80971 For extra sanity checking, fill free'd memory with garbage so we know that
people aren't reusing machine code buffers at all.

llvm-svn: 28228
2006-05-12 00:03:12 +00:00
Chris Lattner 3c729b9e5d Fix some bugs in the freelist manipulation code.
Finally, implement ExecutionEngine::freeMachineCodeForFunction.

llvm-svn: 28227
2006-05-11 23:56:57 +00:00
Evan Cheng d38c22bdd3 Refactor scheduler code. Move register-reduction list scheduler to a
separate file. Added an initial implementation of top-down register pressure
reduction list scheduler.

llvm-svn: 28226
2006-05-11 23:55:42 +00:00
Chris Lattner 873ef133ce Significantly revamp allocation of machine code to use free lists, real
allocation policies and much more.  All this complexity, and we have no
functionality change, woo! :)

llvm-svn: 28225
2006-05-11 23:08:08 +00:00
Chris Lattner 1443bc52be Refactor some code, making it simpler.
When doing the initial pass of constant folding, if we get a constantexpr,
simplify the constant expr like we would do if the constant is folded in the
normal loop.

This fixes the missed-optimization regression in
Transforms/InstCombine/getelementptr.ll last night.

llvm-svn: 28224
2006-05-11 17:11:52 +00:00
Evan Cheng dd7230c9e0 Add MOV16_rm / MOV32_rm and MOV16_mr / MOV32_mr to isLoadFromStackSlot and isStoreToStackSlot
llvm-svn: 28223
2006-05-11 07:33:49 +00:00
Evan Cheng 0da0c50f1e Also add super- register class info.
llvm-svn: 28222
2006-05-11 07:31:44 +00:00
Evan Cheng 229a6d0026 Also add super- register classes info.
llvm-svn: 28221
2006-05-11 07:30:26 +00:00
Evan Cheng 47926aff96 Set weight of zero length intervals to infinite to prevent them from being
spilled.

llvm-svn: 28220
2006-05-11 07:29:24 +00:00
Evan Cheng db6aa4896b Backing out previous check-in.
llvm-svn: 28219
2006-05-11 07:28:16 +00:00
Owen Anderson 68afff2dcd Fix some problems linking stuff in libTarget.
llvm-svn: 28218
2006-05-11 03:10:15 +00:00
Evan Cheng 6ad040a6bc If the live interval legnth is essentially zero, i.e. in every live range
the use follows def immediately, it doesn't make sense to spill it and
hope it will be easier to allocate for this LI.

llvm-svn: 28217
2006-05-10 22:30:41 +00:00
Evan Cheng 47a57ac4f9 Update test case
llvm-svn: 28216
2006-05-10 19:53:05 +00:00
Chris Lattner a36ee4ea34 Two changes:
1. Implement InstCombine/deadcode.ll by not adding instructions in unreachable
   blocks (due to constants in conditional branches/switches) to the worklist.
   This causes them to be deleted before instcombine starts up, leading to
   better optimization.

2. In the prepass over instructions, do trivial constprop/dce as we go.  This
   has the effect of improving the effectiveness of #1.  In addition, it
   *significantly* speeds up instcombine on test cases with large amounts of
   constant folding code (for example, that produced by code specialization
   or partial evaluation).  In one example, it speeds up instcombine from
   0.0589s to 0.0224s with a release build (a 2.6x speedup).

llvm-svn: 28215
2006-05-10 19:00:36 +00:00
Chris Lattner 1a0e0c1c9e New testcase, check that dead code doesn't pessimize instcombine
llvm-svn: 28214
2006-05-10 18:56:04 +00:00
Chris Lattner b25cb79604 Fix the PowerPC JIT-only failure on UnitTests/Vector/sumarray-dbl, which is
really a bad codegen bug that LLC happens to get lucky with. I must chat with
Nate for the proper fix.

llvm-svn: 28213
2006-05-10 06:38:32 +00:00
Evan Cheng 9665ba053f Templatify RegReductionPriorityQueue
llvm-svn: 28212
2006-05-10 06:16:44 +00:00
Chris Lattner 728c377e0f Add alloca/malloc ctors that don't take array sizes.
llvm-svn: 28211
2006-05-10 04:38:35 +00:00
Chris Lattner bb7ff6690f Add an assertion for a common error
llvm-svn: 28210
2006-05-10 04:32:43 +00:00
Evan Cheng 32982836b6 Watch out for the following case:
1. Use expects a chain output.
2. Node is expanded into multiple target ops.
3. One of the inner node produces a chain, the outer most one doesn't.

llvm-svn: 28209
2006-05-10 02:47:57 +00:00
Evan Cheng d2b8067748 Fix a load folding bug. It is exposed by a multi- resulting instructions
def : Pat<> pattern.

llvm-svn: 28208
2006-05-10 00:05:46 +00:00
Nate Begeman 1a225d23ae Fix PR773
llvm-svn: 28207
2006-05-09 18:20:51 +00:00
Chris Lattner 5d779af587 This method doesn't need to be virtual, thanks to Reid for pointing this out.
llvm-svn: 28206
2006-05-09 17:29:17 +00:00
Chris Lattner f801792e08 Fix a regression in my patch from last night that broke the llvmgcc4 build on
ppc

llvm-svn: 28205
2006-05-09 16:41:59 +00:00
Chris Lattner 2814134a5d Indent .data/.text in the .s file
llvm-svn: 28204
2006-05-09 16:15:00 +00:00
Evan Cheng 43ddc376fb Another instruction scheduling test case
llvm-svn: 28203
2006-05-09 07:20:24 +00:00
Evan Cheng 7d693898ee Add pseudo dependency to force a def&use operand to be scheduled last (unless
the distance between the def and another use is much longer). This is under
option control for now "-sched-lower-defnuse".

llvm-svn: 28201
2006-05-09 07:13:34 +00:00
Evan Cheng 2c74848af1 Debugging info
llvm-svn: 28200
2006-05-09 06:55:15 +00:00
Evan Cheng fc532fe1b7 Remove a completed entry.
llvm-svn: 28199
2006-05-09 06:54:05 +00:00
Evan Cheng c39ab4575e Test case for PR770
llvm-svn: 28198
2006-05-09 06:48:12 +00:00
Evan Cheng ae45020720 PR 770 - permit coallescing of registers in subset register classes.
llvm-svn: 28197
2006-05-09 06:37:48 +00:00
Evan Cheng f2925b3b2c Added sub- register classes information.
llvm-svn: 28196
2006-05-09 06:35:30 +00:00
Evan Cheng 5e7ba0b049 Add sub-register class information.
llvm-svn: 28195
2006-05-09 06:34:26 +00:00
Chris Lattner 4ebc6a2311 Implement MASM sections correctly, without a "has masm sections flag" and a bunch of special case code.
llvm-svn: 28194
2006-05-09 05:33:48 +00:00
Chris Lattner af35b1476e Implement MASM sections correctly, without a "has masm sections flag" and a
bunch of special case code.

llvm-svn: 28193
2006-05-09 05:33:28 +00:00
Chris Lattner 8c2bfc0659 Oh yeah, there are two of these now, unify both.
llvm-svn: 28192
2006-05-09 05:24:50 +00:00
Chris Lattner 6341df8069 Setting SwitchToSectionDirective properly in the MASM backend permits a bunch
of code to be unified.

llvm-svn: 28191
2006-05-09 05:23:12 +00:00
Chris Lattner 0b7acaf027 MASM doesn't have one of these.
llvm-svn: 28190
2006-05-09 05:21:47 +00:00
Chris Lattner d36cc2b610 Don't prefix section directives with a tab. Doing so causes blank lines to
be emitted to the .s file.

llvm-svn: 28189
2006-05-09 05:19:59 +00:00
Chris Lattner e64f764d25 Make the masm codepath work like the normal code path.
llvm-svn: 28188
2006-05-09 05:15:58 +00:00
Chris Lattner e0006c6794 Preserve prior behavior
llvm-svn: 28187
2006-05-09 05:15:24 +00:00
Chris Lattner c0f0dfa56f The MASM asmprinter has been fixed, these hacks are no longer needed.
llvm-svn: 28186
2006-05-09 05:13:34 +00:00
Chris Lattner d0201946ad Fix the MASM asmprinter's lies. It does not want to emit code to .text/.data
it wants it emitted to _text/_data.

llvm-svn: 28185
2006-05-09 05:12:53 +00:00
Chris Lattner 8488ba2e41 Split SwitchSection into SwitchTo{Text|Data}Section methods.
llvm-svn: 28184
2006-05-09 04:59:56 +00:00
Chris Lattner a6212b0fe6 Split SwitchSection into the SwitchTo{Text|Data}Section functions, to better
support assemblers that distinguish the two.

llvm-svn: 28183
2006-05-09 04:59:30 +00:00
Chris Lattner 8587f8885d Some notes and thoughts to myself
llvm-svn: 28182
2006-05-09 04:58:46 +00:00
Chris Lattner 4fe87d67c4 Patch to make some xforms preserve each other. Patch contributed by
Domagoj Babic!

llvm-svn: 28181
2006-05-09 04:13:41 +00:00
Reid Spencer 357f3e8231 Use the -dumpversion option to llvm-gcc which gives us just the version #
and is unlikely to change in future releases. This also simplifies the
parsing of the full and major llvm-gcc version numbers in the script.

llvm-svn: 28180
2006-05-09 00:31:01 +00:00
Chris Lattner 6d8dd189f6 Move some methods out of line so that MutexGuard.h isn't needed in a public header.
llvm-svn: 28179
2006-05-08 22:00:52 +00:00
Chris Lattner 12b056007e Move methods out of line so that MutexGuard.h isn't required in the header.
llvm-svn: 28178
2006-05-08 22:00:26 +00:00
Chris Lattner aa193d80a9 Another bad case I noticed
llvm-svn: 28177
2006-05-08 21:39:45 +00:00
Chris Lattner 5bcea612f4 add a note
llvm-svn: 28176
2006-05-08 21:24:21 +00:00
Chris Lattner 446e1ef26a Make the case I just checked in stronger. Now we compile this:
short test2(short X, short x) {
  int Y = (short)(X+x);
  return Y >> 1;
}

to:

_test2:
        add r2, r3, r4
        extsh r2, r2
        srawi r3, r2, 1
        blr

instead of:

_test2:
        add r2, r3, r4
        extsh r2, r2
        srwi r2, r2, 1
        extsh r3, r2
        blr

llvm-svn: 28175
2006-05-08 21:18:59 +00:00
Chris Lattner 29062da0ac Implement and_sext.ll:test3, generating:
_test4:
        srawi r3, r3, 16
        blr

instead of:

_test4:
        srwi r2, r3, 16
        extsh r3, r2
        blr

for:

short test4(unsigned X) {
  return (X >> 16);
}

llvm-svn: 28174
2006-05-08 20:59:41 +00:00
Chris Lattner 536c83f25d new testcase
llvm-svn: 28173
2006-05-08 20:58:58 +00:00
Nate Begeman ce6646c366 Yet more readme updating
llvm-svn: 28172
2006-05-08 20:54:02 +00:00
Chris Lattner 2935d8190c Compile this:
short test4(unsigned X) {
  return (X >> 16);
}

to:

_test4:
        movl 4(%esp), %eax
        sarl $16, %eax
        ret

instead of:

_test4:
        movl $-65536, %eax
        andl 4(%esp), %eax
        sarl $16, %eax
        ret

llvm-svn: 28171
2006-05-08 20:51:54 +00:00
Nate Begeman 68a45419cc New note about something bad happening in target independent optimizers
llvm-svn: 28170
2006-05-08 20:08:28 +00:00