summaryrefslogtreecommitdiffstats
path: root/llvm
Commit message (Collapse)AuthorAgeFilesLines
* Refactor this code a bit and make it more general. This now compiles:Chris Lattner2005-09-181-24/+53
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | struct S { unsigned int i : 6, j : 11, k : 15; } b; void plus2 (unsigned int x) { b.j += x; } To: _plus2: lis r2, ha16(L_b$non_lazy_ptr) lwz r2, lo16(L_b$non_lazy_ptr)(r2) lwz r4, 0(r2) slwi r3, r3, 6 add r3, r4, r3 rlwimi r3, r4, 0, 26, 14 stw r3, 0(r2) blr instead of: _plus2: lis r2, ha16(L_b$non_lazy_ptr) lwz r2, lo16(L_b$non_lazy_ptr)(r2) lwz r4, 0(r2) rlwinm r5, r4, 26, 21, 31 add r3, r5, r3 rlwimi r4, r3, 6, 15, 25 stw r4, 0(r2) blr by eliminating an 'and'. I'm pretty sure this is as small as we can go :) llvm-svn: 23386
* CompileChris Lattner2005-09-181-31/+70
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | struct S { unsigned int i : 6, j : 11, k : 15; } b; void plus2 (unsigned int x) { b.j += x; } to: plus2: mov %EAX, DWORD PTR [b] mov %ECX, %EAX and %ECX, 131008 mov %EDX, DWORD PTR [%ESP + 4] shl %EDX, 6 add %EDX, %ECX and %EDX, 131008 and %EAX, -131009 or %EDX, %EAX mov DWORD PTR [b], %EDX ret instead of: plus2: mov %EAX, DWORD PTR [b] mov %ECX, %EAX shr %ECX, 6 and %ECX, 2047 add %ECX, DWORD PTR [%ESP + 4] shl %ECX, 6 and %ECX, 131008 and %EAX, -131009 or %ECX, %EAX mov DWORD PTR [b], %ECX ret llvm-svn: 23385
* Generalize this transform, using MaskedValueIsZero, allowing us to compile:Chris Lattner2005-09-181-14/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | struct S { unsigned int i : 6, j : 11, k : 15; } b; void plus3 (unsigned int x) { b.k += x; } To: plus3: mov %EAX, DWORD PTR [%ESP + 4] shl %EAX, 17 add DWORD PTR [b], %EAX ret instead of: plus3: mov %EAX, DWORD PTR [%ESP + 4] shl %EAX, 17 mov %ECX, DWORD PTR [b] add %EAX, %ECX and %EAX, -131072 and %ECX, 131071 or %ECX, %EAX mov DWORD PTR [b], %ECX ret llvm-svn: 23384
* fix typeoChris Lattner2005-09-181-1/+1
| | | | llvm-svn: 23383
* Remove unintentionally committed codeChris Lattner2005-09-181-3/+0
| | | | llvm-svn: 23382
* implement shift.ll:test25. This compiles:Chris Lattner2005-09-181-3/+53
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | struct S { unsigned int i : 6, j : 11, k : 15; } b; void plus3 (unsigned int x) { b.k += x; } to: _plus3: lis r2, ha16(L_b$non_lazy_ptr) lwz r2, lo16(L_b$non_lazy_ptr)(r2) lwz r3, 0(r2) rlwinm r4, r3, 0, 0, 14 add r4, r4, r3 rlwimi r4, r3, 0, 15, 31 stw r4, 0(r2) blr instead of: _plus3: lis r2, ha16(L_b$non_lazy_ptr) lwz r2, lo16(L_b$non_lazy_ptr)(r2) lwz r4, 0(r2) srwi r5, r4, 17 add r3, r5, r3 slwi r3, r3, 17 rlwimi r3, r4, 0, 15, 31 stw r3, 0(r2) blr llvm-svn: 23381
* new testcaseChris Lattner2005-09-181-0/+8
| | | | llvm-svn: 23380
* Implement add.ll:test29. Codegening:Chris Lattner2005-09-181-0/+66
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | struct S { unsigned int i : 6, j : 11, k : 15; } b; void plus1 (unsigned int x) { b.i += x; } as: _plus1: lis r2, ha16(L_b$non_lazy_ptr) lwz r2, lo16(L_b$non_lazy_ptr)(r2) lwz r4, 0(r2) add r3, r4, r3 rlwimi r3, r4, 0, 0, 25 stw r3, 0(r2) blr instead of: _plus1: lis r2, ha16(L_b$non_lazy_ptr) lwz r2, lo16(L_b$non_lazy_ptr)(r2) lwz r4, 0(r2) rlwinm r5, r4, 0, 26, 31 add r3, r5, r3 rlwimi r3, r4, 0, 0, 25 stw r3, 0(r2) blr llvm-svn: 23379
* new testcaseChris Lattner2005-09-181-0/+10
| | | | llvm-svn: 23378
* remove debug outputChris Lattner2005-09-181-1/+0
| | | | llvm-svn: 23377
* Implement or.ll:test21. This teaches instcombine to be able to turn this:Chris Lattner2005-09-181-3/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | struct { unsigned int bit0:1; unsigned int ubyte:31; } sdata; void foo() { sdata.ubyte++; } into this: foo: add DWORD PTR [sdata], 2 ret instead of this: foo: mov %EAX, DWORD PTR [sdata] mov %ECX, %EAX add %ECX, 2 and %ECX, -2 and %EAX, 1 or %EAX, %ECX mov DWORD PTR [sdata], %EAX ret llvm-svn: 23376
* new testcaseChris Lattner2005-09-181-0/+8
| | | | llvm-svn: 23375
* Implement hook for ppcChris Lattner2005-09-172-0/+18
| | | | llvm-svn: 23374
* add a new callbackChris Lattner2005-09-171-0/+8
| | | | llvm-svn: 23373
* More DAG combining. Still need the branch instructions, and select_ccNate Begeman2005-09-161-5/+425
| | | | llvm-svn: 23371
* Fix a minor bug, add commentsChris Lattner2005-09-161-2/+5
| | | | llvm-svn: 23370
* teach the type inference code how to infer types for instructions and nodeChris Lattner2005-09-152-33/+66
| | | | | | | xforms. Run type inference on result patterns, so we always have fully typed results (and to catch errors in .td files). llvm-svn: 23369
* put instructions into a map instead of a vector for quick lookupChris Lattner2005-09-152-7/+18
| | | | llvm-svn: 23368
* when parsing instructions remember information about the types taken andChris Lattner2005-09-152-7/+25
| | | | | | returned. llvm-svn: 23367
* disable this for nowChris Lattner2005-09-151-0/+2
| | | | llvm-svn: 23366
* Start parsing "Pattern" nodesChris Lattner2005-09-151-11/+52
| | | | llvm-svn: 23365
* rename a couple of methods, add structure for pattern parsingChris Lattner2005-09-152-17/+29
| | | | llvm-svn: 23364
* Verify that xform functions only occur in logical placesChris Lattner2005-09-141-5/+14
| | | | llvm-svn: 23363
* Promote xform fns to be explicit nodes in result patterns, and clean offChris Lattner2005-09-141-1/+15
| | | | | | predicates since they will have already matched at this point. llvm-svn: 23362
* start building the instruction dest pattern correctly. Change the xformChris Lattner2005-09-142-15/+27
| | | | | | | functions to preserve the Record for the xform instead of making it into a function name. llvm-svn: 23361
* catch unnamed inputsChris Lattner2005-09-141-1/+9
| | | | llvm-svn: 23360
* check that there are no unexpected operandsChris Lattner2005-09-141-3/+11
| | | | llvm-svn: 23359
* force all instruction operands to be named.Chris Lattner2005-09-142-5/+5
| | | | llvm-svn: 23358
* Give all operands namesChris Lattner2005-09-141-1/+1
| | | | llvm-svn: 23357
* give all operands namesChris Lattner2005-09-142-12/+14
| | | | llvm-svn: 23356
* Check that operands have unique names. REJECT instructions with broken operandChris Lattner2005-09-141-29/+39
| | | | | | lists: only don't parse them if they are entirely missing (sparcv9). llvm-svn: 23355
* fix a broke range checkChris Lattner2005-09-141-1/+1
| | | | llvm-svn: 23354
* Parse significantly more of the instruction pattern, now collecting andChris Lattner2005-09-142-46/+141
| | | | | | verifying information about the operands. llvm-svn: 23353
* Fix some issues exposed by more testing. XORIS had the wrong operandsChris Lattner2005-09-141-5/+5
| | | | | | | specified. The various *imm operands defined by PPC are really all i32, even though the actual immediate is restricted to a smaller value in it. llvm-svn: 23352
* Verify that set destinations occur first in the instruction operand list.Chris Lattner2005-09-141-2/+28
| | | | llvm-svn: 23351
* Fix some bugs noticed by new checking codeChris Lattner2005-09-141-8/+14
| | | | llvm-svn: 23350
* add an accessorChris Lattner2005-09-141-0/+6
| | | | llvm-svn: 23349
* Fix the regression last night compiling povrayChris Lattner2005-09-141-2/+3
| | | | llvm-svn: 23348
* fix a major regression from my patch this afternoonChris Lattner2005-09-141-0/+1
| | | | llvm-svn: 23347
* remove some code that isn't ready for prime timeChris Lattner2005-09-142-6/+2
| | | | llvm-svn: 23346
* Switch to a slightly more structured representation for instructionsChris Lattner2005-09-142-8/+24
| | | | llvm-svn: 23345
* Add some more checking/verification codeChris Lattner2005-09-141-2/+19
| | | | llvm-svn: 23344
* start parsing instructions into patterns, start doing many more checks ofChris Lattner2005-09-142-4/+61
| | | | | | 'set's. llvm-svn: 23343
* we don't need this proto any longerChris Lattner2005-09-131-1/+0
| | | | llvm-svn: 23342
* don't emit the namespace inside the class!Chris Lattner2005-09-131-2/+1
| | | | llvm-svn: 23341
* Emit code suitable for emission into the ISel class, allowing us to use/defineChris Lattner2005-09-131-4/+4
| | | | | | methods. llvm-svn: 23340
* move the #include for the generated code into the isel class body so weChris Lattner2005-09-131-1/+3
| | | | | | can use/define class methods llvm-svn: 23339
* continue xform function parsingChris Lattner2005-09-132-1/+12
| | | | llvm-svn: 23338
* Start parsing node transformation informationChris Lattner2005-09-132-6/+46
| | | | llvm-svn: 23337
* Add a new Record::getValueAsCode method to mirror the other getValueAs*Chris Lattner2005-09-133-11/+20
| | | | | | methods. Use it to simplify some code. llvm-svn: 23336
OpenPOWER on IntegriCloud