David Greene [Tue, 5 Jan 2010 01:24:24 +0000 (01:24 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92566
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Tue, 5 Jan 2010 01:24:21 +0000 (01:24 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92565
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Tue, 5 Jan 2010 01:24:18 +0000 (01:24 +0000)]
Change SelectCode's argument from SDValue to SDNode *, to make it more
clear what information these functions are actually using.
This is also a micro-optimization, as passing a SDNode * around is
simpler than passing a { SDNode *, int } by value or reference.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92564
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Tue, 5 Jan 2010 01:24:08 +0000 (01:24 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92563
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Tue, 5 Jan 2010 01:23:38 +0000 (01:23 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92562
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Tue, 5 Jan 2010 01:23:36 +0000 (01:23 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92561
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Tue, 5 Jan 2010 01:23:34 +0000 (01:23 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92560
91177308-0d34-0410-b5e6-
96231b3b80d8
Devang Patel [Tue, 5 Jan 2010 01:10:40 +0000 (01:10 +0000)]
Remove dead debug info intrinsics.
Intrinsic::dbg_stoppoint
Intrinsic::dbg_region_start
Intrinsic::dbg_region_end
Intrinsic::dbg_func_start
AutoUpgrade simply ignores these intrinsics now.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92557
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Tue, 5 Jan 2010 00:44:20 +0000 (00:44 +0000)]
Remove the SDNPAssociative properties for the flags-producing
operators. Eli pointed out that it's not obvious what that
would mean.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92555
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Tue, 5 Jan 2010 00:42:54 +0000 (00:42 +0000)]
Simplify this code; avoid duplicating the low-level implementation code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92554
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Tue, 5 Jan 2010 00:30:22 +0000 (00:30 +0000)]
Fix a typo in a comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92552
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Dunbar [Tue, 5 Jan 2010 00:15:58 +0000 (00:15 +0000)]
Fix some struct/class specifier mismatches.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92550
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Tue, 5 Jan 2010 00:10:05 +0000 (00:10 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92548
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Tue, 5 Jan 2010 00:03:48 +0000 (00:03 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92547
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Mon, 4 Jan 2010 23:48:20 +0000 (23:48 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92545
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Mon, 4 Jan 2010 23:39:17 +0000 (23:39 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92544
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Mon, 4 Jan 2010 23:22:07 +0000 (23:22 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92542
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Dunbar [Mon, 4 Jan 2010 23:17:24 +0000 (23:17 +0000)]
Update CMake LibDeps
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92540
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Mon, 4 Jan 2010 23:14:46 +0000 (23:14 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92539
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Mon, 4 Jan 2010 23:06:47 +0000 (23:06 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92535
91177308-0d34-0410-b5e6-
96231b3b80d8
Devang Patel [Mon, 4 Jan 2010 23:04:36 +0000 (23:04 +0000)]
Fix debug_inlined section entries for routines whose names are changed through __asm() extension.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92533
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Mon, 4 Jan 2010 23:02:10 +0000 (23:02 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92532
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Mon, 4 Jan 2010 22:49:02 +0000 (22:49 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92529
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Mon, 4 Jan 2010 22:41:43 +0000 (22:41 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92528
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Mon, 4 Jan 2010 22:33:16 +0000 (22:33 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92524
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Dunbar [Mon, 4 Jan 2010 22:03:51 +0000 (22:03 +0000)]
tblgen/OptParser: Use EmitSourceFileHeader.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92521
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Mon, 4 Jan 2010 22:02:01 +0000 (22:02 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92520
91177308-0d34-0410-b5e6-
96231b3b80d8
Douglas Gregor [Mon, 4 Jan 2010 21:58:55 +0000 (21:58 +0000)]
Fix CMake build for InstCombine changes
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92519
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Mon, 4 Jan 2010 21:48:34 +0000 (21:48 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92518
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Mon, 4 Jan 2010 21:35:15 +0000 (21:35 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92516
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Mon, 4 Jan 2010 21:26:07 +0000 (21:26 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92515
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 4 Jan 2010 21:23:34 +0000 (21:23 +0000)]
Make this test more portable.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92514
91177308-0d34-0410-b5e6-
96231b3b80d8
Evan Cheng [Mon, 4 Jan 2010 21:22:48 +0000 (21:22 +0000)]
Perform this folding as a target specific dag combine:
(or (x << c) | (y >> (64 - c))) ==> (shld64 x, y, c)
The isel patterns may not catch all the cases if general dag combine has reduced width of source operands.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92513
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 4 Jan 2010 21:00:54 +0000 (21:00 +0000)]
Use a pointer type rather than MVT::Other for the ExternalSymbol node used
in an inline asm.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92512
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 4 Jan 2010 20:55:05 +0000 (20:55 +0000)]
Remove some README.txt entries which are now implemented.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92511
91177308-0d34-0410-b5e6-
96231b3b80d8
Devang Patel [Mon, 4 Jan 2010 20:54:06 +0000 (20:54 +0000)]
Remove oversimplified test case.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92510
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 4 Jan 2010 20:53:54 +0000 (20:53 +0000)]
Add some tests and update an existing test to reflect recent
x86 isel peeps.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92509
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 4 Jan 2010 20:52:50 +0000 (20:52 +0000)]
A use by operand 1 or 2 of a SELECT is not a FLAGS use. This
lets the test-elimination work in more conditional-move cases.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92508
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 4 Jan 2010 20:51:50 +0000 (20:51 +0000)]
Flags-producing add, and, or, etc. have the same profibility
rules as normal add, and, or, etc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92507
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 4 Jan 2010 20:51:05 +0000 (20:51 +0000)]
Add SDNPCommutative and SDNPAssociative to several X86 target nodes.
This lets isel fold loads into them in more cases.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92506
91177308-0d34-0410-b5e6-
96231b3b80d8
Devang Patel [Mon, 4 Jan 2010 20:44:00 +0000 (20:44 +0000)]
Fix begin and end markers for nested scopes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92505
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 4 Jan 2010 20:36:57 +0000 (20:36 +0000)]
Replace some special-case code which probably was buggy with an assertion
verifying that the special case does not occur.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92504
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 4 Jan 2010 20:31:55 +0000 (20:31 +0000)]
Remove the CPAttrParentAsRoot code, which is unused, and inconvenient
for a refactoring I'm working on.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92503
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Mon, 4 Jan 2010 19:57:26 +0000 (19:57 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92502
91177308-0d34-0410-b5e6-
96231b3b80d8
Devang Patel [Mon, 4 Jan 2010 19:41:13 +0000 (19:41 +0000)]
The test, derived from optimzed IR, does not mention "bar" in debug info anywhere so the dwarf writer is not expected to emit any debug info for function "bar".
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92499
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Mon, 4 Jan 2010 19:36:42 +0000 (19:36 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92498
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Mon, 4 Jan 2010 19:10:20 +0000 (19:10 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92496
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 4 Jan 2010 18:57:15 +0000 (18:57 +0000)]
Truncate GEP indexes larger than the pointer size down to pointer size
when doing this transform if the GEP is not inbounds. No testcase because
it is very difficult to trigger this: instcombine already canonicalizes
GEP indices to pointer size, so it relies specific permutations of the
instcombine worklist.
Thanks to Duncan for pointing this possible problem out.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92495
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 4 Jan 2010 18:48:26 +0000 (18:48 +0000)]
silence a bogus 'might be used uninit' warning from GCC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92494
91177308-0d34-0410-b5e6-
96231b3b80d8
Dan Gohman [Mon, 4 Jan 2010 18:38:39 +0000 (18:38 +0000)]
Add a comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92492
91177308-0d34-0410-b5e6-
96231b3b80d8
David Greene [Mon, 4 Jan 2010 17:47:05 +0000 (17:47 +0000)]
Change errs() to dbgs().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92490
91177308-0d34-0410-b5e6-
96231b3b80d8
Anton Korobeynikov [Mon, 4 Jan 2010 10:31:54 +0000 (10:31 +0000)]
Fix invalid chain folding for memory variant of sdiv / udiv
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92472
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 4 Jan 2010 07:59:07 +0000 (07:59 +0000)]
move some more cast-related stuff
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92471
91177308-0d34-0410-b5e6-
96231b3b80d8
Mikhail Glushenkov [Mon, 4 Jan 2010 07:55:25 +0000 (07:55 +0000)]
80-col violations, trailing whitespace.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92470
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 4 Jan 2010 07:54:59 +0000 (07:54 +0000)]
move the [Can]EvaluateInDifferentType functions out to InstCombineCasts.cpp
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92469
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 4 Jan 2010 07:53:58 +0000 (07:53 +0000)]
split 943 lines of instcombine out to a new InstCombineCasts.cpp
file. InstructionCombining.cpp is now down to a svelte 9300 lines :)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92468
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 4 Jan 2010 07:37:31 +0000 (07:37 +0000)]
split instcombine of compares (visit[FI]Cmp) out to
a new InstCombineCompares.cpp file.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92467
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 4 Jan 2010 07:19:55 +0000 (07:19 +0000)]
update cmakefile
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92466
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 4 Jan 2010 07:17:19 +0000 (07:17 +0000)]
move the 'SimplifyDemandedFoo' methods out to their own file, cutting 1K lines out of instcombine.cpp
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92465
91177308-0d34-0410-b5e6-
96231b3b80d8
Mikhail Glushenkov [Mon, 4 Jan 2010 07:16:12 +0000 (07:16 +0000)]
Fix the Emacs mode string.
Also trailing whitespace & 80-col violations.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92464
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 4 Jan 2010 07:12:23 +0000 (07:12 +0000)]
split the instcombine class definition out to a header shared
among the instcombine library.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92463
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 4 Jan 2010 07:02:48 +0000 (07:02 +0000)]
remove a ton of unneeded LLVMContext stuff.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92462
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 4 Jan 2010 06:30:00 +0000 (06:30 +0000)]
move InstCombineWorklist out to its own header.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92461
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 4 Jan 2010 06:28:20 +0000 (06:28 +0000)]
forgot to svn add these.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92460
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 4 Jan 2010 06:23:24 +0000 (06:23 +0000)]
move instcombine to its own library, it's past time.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92459
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Mon, 4 Jan 2010 06:03:59 +0000 (06:03 +0000)]
implement an instcombine xform needed by clang's codegen
on the example in PR4216. This doesn't trigger in the testsuite,
so I'd really appreciate someone scrutinizing the logic for
correctness.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92458
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 3 Jan 2010 18:33:18 +0000 (18:33 +0000)]
fix PR5930, allowing the asmprinter to emit difference between
two labels as a truncate.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92455
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 3 Jan 2010 18:14:24 +0000 (18:14 +0000)]
it isn't safe to speculative load from a malloc, it might have
returned null, and may not have been big enough in any case.
Thanks to Jay Foad for pointing this out!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92452
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 3 Jan 2010 18:10:58 +0000 (18:10 +0000)]
add PR#
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92451
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 3 Jan 2010 18:09:40 +0000 (18:09 +0000)]
differences between two blockaddress's don't cause a
global variable initializer to require relocations.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92450
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 3 Jan 2010 06:58:48 +0000 (06:58 +0000)]
pull my debug hooks out, I'm done with this xform for now.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92446
91177308-0d34-0410-b5e6-
96231b3b80d8
Nick Lewycky [Sun, 3 Jan 2010 04:39:07 +0000 (04:39 +0000)]
Small cleanups, refactor some duplicated code into a single method. No
functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92445
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sun, 3 Jan 2010 03:03:27 +0000 (03:03 +0000)]
generalize the previous transformation to handle indexing into
arrays of structs and other arrays, so long as all the subsequent
indexes are constants. This triggers frequently for stuff like:
@divisions = internal constant [29 x [2 x i32]] [[2 x i32] zeroinitializer, [2 x i32] [i32 0, i32 1], [2 x i32] [i32 0, i32 2], [2 x i32] [i32 0, i32 1], [2 x i32] zeroinitializer, [2 x i32] [i32 0, i32 1], [2 x i32] [i32 0, i32 1], [2 x i32] [i32 0, i32 2], [2 x i32] [i32 0, i32 2], [2 x i32] zeroinitializer, [2 x i32] zeroinitializer, [2 x i32] zeroinitializer, [2 x i32] [i32 0, i32 2], [2 x i32] [i32 0, i32 1], [2 x i32] zeroinitializer, [2 x i32] [i32 1, i32 0], [2 x i32] [i32 1, i32 1], [2 x i32] [i32 1, i32 1], [2 x i32] [i32 1, i32 2], [2 x i32] [i32 1, i32 1], [2 x i32] [i32 1, i32 0], [2 x i32] [i32 1, i32 2], [2 x i32] [i32 1, i32 2], [2 x i32] [i32 1, i32 0], [2 x i32] [i32 1, i32 0], [2 x i32] [i32 1, i32 0], [2 x i32] [i32 1, i32 1], [2 x i32] [i32 1, i32 2], [2 x i32] [i32 1, i32 2]], align 32 ; <[29 x [2 x i32]]*> [#uses=50]
%623 = getelementptr inbounds [29 x [2 x i32]]* @divisions, i64 0, i64 %619, i64 0 ; <i32*> [#uses=1]
%684 = icmp eq i32 %683, 999
also for the "my_defs" table in 'gs', etc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92444
91177308-0d34-0410-b5e6-
96231b3b80d8
Nick Lewycky [Sun, 3 Jan 2010 00:55:31 +0000 (00:55 +0000)]
Cleanup.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92436
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 2 Jan 2010 22:08:28 +0000 (22:08 +0000)]
teach instcombine to optimize idioms like A[i]&42 == 0. This
occurs in 403.gcc in mode_mask_array, in safe-ctype.c (which
is copied in multiple apps) in _sch_istable, etc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92427
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 2 Jan 2010 21:50:18 +0000 (21:50 +0000)]
Teach the table lookup optimization to generate range compares
when a consequtive sequence of elements all satisfies the
predicate. Like the double compare case, this generates better
code than the magic constant case and generalizes to more than
32/64 element array lookups.
Here are some examples where it triggers. From 403.gcc, most
accesses to the rtx_class array are handled, e.g.:
@rtx_class = constant [153 x i8] c"xxxxxmmmmmmmmxxxxxxxxxxxxmxxxxxxiiixxxxxxxxxxxxxxxxxxxooxooooooxxoooooox3x2c21c2222ccc122222ccccaaaaaa<<<<<<<<<<<<<<<<<<111111111111bbooxxxxxxxxxxcc2211x", align 32 ; <[153 x i8]*> [#uses=547]
%142 = icmp eq i8 %141, 105
@rtx_class = constant [153 x i8] c"xxxxxmmmmmmmmxxxxxxxxxxxxmxxxxxxiiixxxxxxxxxxxxxxxxxxxooxooooooxxoooooox3x2c21c2222ccc122222ccccaaaaaa<<<<<<<<<<<<<<<<<<111111111111bbooxxxxxxxxxxcc2211x", align 32 ; <[153 x i8]*> [#uses=543]
%165 = icmp eq i8 %164, 60
Also, most of the 59-element arrays (mode_class/rid_to_yy, etc)
optimized before are actually range compares. This lets 32-bit
machines optimize them.
400.perlbmk has stuff like this:
400.perlbmk: PL_regkind, even for 32-bit:
@PL_regkind = constant [62 x i8] c"\00\00\02\02\02\06\06\06\06\09\09\0B\0B\0D\0E\0E\0E\11\12\12\14\14\16\16\18\18\1A\1A\1C\1C\1E\1F !!!$$&'((((,-.///
88886789:;8$", align 32 ; <[62 x i8]*> [#uses=4]
%811 = icmp ne i8 %810, 33
@PL_utf8skip = constant [256 x i8] c"\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\01\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\03\04\04\04\04\04\04\04\04\05\05\05\05\06\06\07\0D", align 32 ; <[256 x i8]*> [#uses=94]
%12 = icmp ult i8 %10, 2
etc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92426
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 2 Jan 2010 21:46:33 +0000 (21:46 +0000)]
theoretically the negate we find could be in a different function, check
for this case.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92425
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 2 Jan 2010 20:20:33 +0000 (20:20 +0000)]
use enums for the over/underdefined markers for clarity. Switch
to using -2/-3 instead of -1/-2 for a future xform.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92423
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 2 Jan 2010 20:07:03 +0000 (20:07 +0000)]
remove the random sampling framework, which is not maintained anymore.
If there is interest, it can be resurrected from SVN. PR4912.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92422
91177308-0d34-0410-b5e6-
96231b3b80d8
Nick Lewycky [Sat, 2 Jan 2010 16:14:56 +0000 (16:14 +0000)]
Fix logic error in previous commit. The != case needs to become an or, not an
and.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92419
91177308-0d34-0410-b5e6-
96231b3b80d8
Nick Lewycky [Sat, 2 Jan 2010 15:25:44 +0000 (15:25 +0000)]
Optimize pointer comparison into the typesafe form, now that the backends will
handle them efficiently. This is the opposite direction of the transformation
we used to have here.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92418
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 2 Jan 2010 09:35:17 +0000 (09:35 +0000)]
Generalize the previous xform to handle cases where exactly
two elements match or don't match with two comparisons. For
example, the testcase compiles into:
define i1 @test5(i32 %X) {
%1 = icmp eq i32 %X, 2 ; <i1> [#uses=1]
%2 = icmp eq i32 %X, 7 ; <i1> [#uses=1]
%R = or i1 %1, %2 ; <i1> [#uses=1]
ret i1 %R
}
This generalizes the previous xforms when the array is larger than
64 elements (and this case matches) and generates better code for
cases where it overlaps with the magic bitshift case.
This generalizes more cases than you might expect. For example,
400.perlbmk has:
@PL_utf8skip = constant [256 x i8] c"\01\01\01\...
%15 = icmp ult i8 %7, 7
403.gcc has:
@rid_to_yy = internal constant [114 x i16] [i16 259, i16 260, ...
%18 = icmp eq i16 %16, 295
and xalancbmk has a bunch of examples, such as
_ZN11xercesc_2_5L15gCombiningCharsE and _ZN11xercesc_2_5L10gBaseCharsE.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92417
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 2 Jan 2010 09:22:13 +0000 (09:22 +0000)]
fix a miscompilation I introduced of cdecl with a late change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92416
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 2 Jan 2010 08:56:52 +0000 (08:56 +0000)]
enhance the compare/load/index optimization to work on *any* load
from a global with 32/64 elements or less (depending on whether
i64 is native on the target), generating a bitshift idiom to
determine the result. For example, on test4 we produce:
define i1 @test4(i32 %X) {
%1 = lshr i32 933, %X ; <i32> [#uses=1]
%2 = and i32 %1, 1 ; <i32> [#uses=1]
%R = icmp ne i32 %2, 0 ; <i1> [#uses=1]
ret i1 %R
}
This triggers in a number of interesting cases, for example, here's an
fp case:
@A.3255 = internal constant [4 x double] [double 4.
100000e+00, double -3.
900000e+00, double -1.
000000e+00, double 1.
000000e+00], align 32 ; <[4 x double]*> [#uses=7]
...
%7 = fcmp olt double %3, 0.
000000e+00
In this case we make the slen2_tab global dead, which is nice:
@slen2_tab = internal constant [16 x i32] [i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 1, i32 2, i32 3, i32 1, i32 2, i32 3, i32 2, i32 3], align 32 ; <[16 x i32]*> [#uses=1]
...
%204 = icmp eq i32 %46, 0
Perl has a bunch of these, also on the 'Perl_regkind' array:
@Perl_yygindex = internal constant [51 x i16] [i16 0, i16 0, i16 0, i16 0, i16 374, i16 351, i16 0, i16 -12, i16 0, i16 946, i16 413, i16 -83, i16 0, i16 0, i16 0, i16 -311, i16 -13, i16 4007, i16 2893, i16 0, i16 0, i16 0, i16 0, i16 0, i16 372, i16 -8, i16 0, i16 0, i16 246, i16 -131, i16 43, i16 86, i16 208, i16 -45, i16 -169, i16 987, i16 0, i16 0, i16 0, i16 0, i16 308, i16 0, i16 -271, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0], align 32 ; <[51 x i16]*> [#uses=1]
...
%1364 = icmp eq i16 %1361, 0
186.crafty really likes this on 64-bit machines, because it triggers on a bunch of globals like this:
@white_outpost = internal constant [64 x i8] c"\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\02\02\00\00\00\00\00\04\05\05\04\00\00\00\00\03\06\06\03\00\00\00\00\00\01\01\00\00\00\00\00\00\00\00\00\00\00", align 32 ; <[64 x i8]*> [#uses=2]
However the big winner is 403.gcc, which triggers hundreds of times, eliminating all the accesses to the 57-element arrays 'mode_class', mode_unit_size, mode_bitsize, regclass_map, etc.
go 64-bit machines :)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92415
91177308-0d34-0410-b5e6-
96231b3b80d8
Mikhail Glushenkov [Sat, 2 Jan 2010 08:27:23 +0000 (08:27 +0000)]
Forward -O0 to llvm-gcc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92414
91177308-0d34-0410-b5e6-
96231b3b80d8
Mikhail Glushenkov [Sat, 2 Jan 2010 08:27:10 +0000 (08:27 +0000)]
Apparently, it is OK for -MT to be specified several times.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92413
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 2 Jan 2010 08:20:51 +0000 (08:20 +0000)]
enhance the previous optimization to work with fcmp in addition
to icmp.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92412
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 2 Jan 2010 08:12:04 +0000 (08:12 +0000)]
Teach instcombine to fold compares of loads from constant
arrays with variable indices into a comparison of the index
with a constant. The most common occurrence of this that
I see by far is stuff like:
if ("foobar"[i] == '\0') ...
which we compile into: if (i == 6), saving a load and
materialization of the global address. This also exposes
loop trip count information to later passes in many cases.
This triggers hundreds of times in xalancbmk, which is where I first
noticed it, but it also triggers in many other apps. Here are a few
interesting ones from various apps:
@must_be_connected_without = internal constant [8 x i8*] [i8* getelementptr inbounds ([3 x i8]* @.str64320, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8]* @.str27283, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8]* @.str71327, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8]* @.str72328, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8]* @.str18274, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8]* @.str11267, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8]* @.str32288, i64 0, i64 0), i8* null], align 32 ; <[8 x i8*]*> [#uses=2]
%scevgep.i = getelementptr [8 x i8*]* @must_be_connected_without, i64 0, i64 %indvar.i ; <i8**> [#uses=1]
%17 = load ...
%18 = icmp eq i8* %17, null ; <i1> [#uses=1]
-> icmp eq i64 %indvar.i, 7
@yytable1095 = internal constant [84 x i8] c"\12\01(\05\06\07\08\09\0A\0B\0C\0D\0E1\0F\10\11266\1D: \10\11,-,0\03'\10\11B6\04\17&\18\1945\05\06\07\08\09\0A\0B\0C\0D\0E\1E\0F\10\11*\1A\1B\1C$3+>#%;<IJ=ADFEGH9KL\00\00\00C", align 32 ; <[84 x i8]*> [#uses=2]
%57 = getelementptr inbounds [84 x i8]* @yytable1095, i64 0, i64 %56 ; <i8*> [#uses=1]
%mode.0.in = getelementptr inbounds [9 x i32]* @mb_mode_table, i64 0, i64 %.pn ; <i32*> [#uses=1]
load ...
%64 = icmp eq i8 %58, 4 ; <i1> [#uses=1]
-> icmp eq i64 %.pn, 35 ; <i1> [#uses=0]
@gsm_DLB = internal constant [4 x i16] [i16 6554, i16 16384, i16 26214, i16 32767]
%scevgep.i = getelementptr [4 x i16]* @gsm_DLB, i64 0, i64 %indvar.i ; <i16*> [#uses=1]
%425 = load %scevgep.i
%426 = icmp eq i16 %425, -32768 ; <i1> [#uses=0]
-> false
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92411
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 2 Jan 2010 01:22:23 +0000 (01:22 +0000)]
constant fold nasty constant expressions formed by llvm-gcc,
wrapping up PR3351.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92410
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 2 Jan 2010 00:31:05 +0000 (00:31 +0000)]
remove the instcombine transformations that are inserting nasty
pointer to int casts that confuse later optimizations. See PR3351
for details.
This improves but doesn't complete fix 483.xalancbmk because llvm-gcc
does this xform in GCC's "fold" routine as well. Clang++ will do
better I guess.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92408
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 2 Jan 2010 00:22:15 +0000 (00:22 +0000)]
allow this to work on linux hosts.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92407
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Sat, 2 Jan 2010 00:00:03 +0000 (00:00 +0000)]
Teach codegen to handle:
(X != null) | (Y != null) --> (X|Y) != 0
(X == null) & (Y == null) --> (X|Y) == 0
so that instcombine can stop doing this for pointers. This is part of PR3351,
which is a case where instcombine doing this for pointers (inserting ptrtoint)
is pessimizing code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92406
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 1 Jan 2010 23:55:04 +0000 (23:55 +0000)]
rename file.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92405
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 1 Jan 2010 23:37:34 +0000 (23:37 +0000)]
whitespace cleanup
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92404
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 1 Jan 2010 23:09:08 +0000 (23:09 +0000)]
add a simple instcombine xform, simplify another one to use hasAllZeroIndices()
instead of hand rolling a loop.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92403
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 1 Jan 2010 22:42:29 +0000 (22:42 +0000)]
generalize the pointer difference optimization to handle
a constantexpr gep on the 'base' side of the expression.
This completes comment #4 in PR3351, which comes from
483.xalancbmk.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92402
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 1 Jan 2010 22:29:12 +0000 (22:29 +0000)]
teach instcombine to optimize pointer difference idioms involving constant
expressions. This is a step towards comment #4 in PR3351.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92401
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 1 Jan 2010 22:12:03 +0000 (22:12 +0000)]
use 'match' to simplify some code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92400
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Lattner [Fri, 1 Jan 2010 18:34:40 +0000 (18:34 +0000)]
implement the transform requested in PR5284
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92398
91177308-0d34-0410-b5e6-
96231b3b80d8
Mikhail Glushenkov [Fri, 1 Jan 2010 04:41:36 +0000 (04:41 +0000)]
Fix a warning on gcc 4.4.
SelectionDAGBuilder.cpp:4294: warning: suggest explicit braces to avoid
ambiguous ‘else’
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92395
91177308-0d34-0410-b5e6-
96231b3b80d8