llvm-6502/lib/Transforms/Scalar
Chris Lattner 3285a6f426 Fix a bug in my checkin from last night that caused miscompilations of
186.crafty, fhourstones and 132.ijpeg.

Bugpoint makes really nasty miscompilations embarassingly easy to find.  It
narrowed it down to the instcombiner and this testcase (from fhourstones):

bool %l7153_l4706_htstat_loopentry_2E_4_no_exit_2E_4(int* %i, [32 x int]* %works, int* %tmp.98.out) {
newFuncRoot:
        %tmp.96 = load int* %i          ; <int> [#uses=1]
        %tmp.97 = getelementptr [32 x int]* %works, long 0, int %tmp.96         ; <int*> [#uses=1]
        %tmp.98 = load int* %tmp.97             ; <int> [#uses=2]
        %tmp.99 = load int* %i          ; <int> [#uses=1]
        %tmp.100 = and int %tmp.99, 7           ; <int> [#uses=1]
        %tmp.101 = seteq int %tmp.100, 7                ; <bool> [#uses=2]
        %tmp.102 = cast bool %tmp.101 to int            ; <int> [#uses=0]
        br bool %tmp.101, label %codeRepl4.exitStub, label %codeRepl3.exitStub

codeRepl4.exitStub:             ; preds = %newFuncRoot
        store int %tmp.98, int* %tmp.98.out
        ret bool true

codeRepl3.exitStub:             ; preds = %newFuncRoot
        store int %tmp.98, int* %tmp.98.out
        ret bool false
}

... which only has one combination performed on it:

$ llvm-as < t.ll | opt -instcombine -debug | llvm-dis
IC: Old =       %tmp.101 = seteq int %tmp.100, 7                ; <bool> [#uses=1]
    New =       setne int %tmp.100, 0           ; <bool>:<badref> [#uses=0]
IC: MOD =       br bool %tmp.101, label %codeRepl3.exitStub, label %codeRepl4.exitStub
IC: MOD =       %tmp.97 = getelementptr [32 x int]* %works, uint 0, int %tmp.96         ; <int*> [#uses=1]

It doesn't get much better than this.  :)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14109 91177308-0d34-0410-b5e6-96231b3b80d8
2004-06-10 02:33:20 +00:00
..
ADCE.cpp Do not mark instructions in unreachable sections of the function as live. 2004-05-04 17:00:46 +00:00
BasicBlockPlacement.cpp Remove obsolete comment. Unreachable blocks will automatically be left at the 2004-02-11 05:20:50 +00:00
ConstantProp.cpp Changes to fix up the inst_iterator to pass to boost iterator checks. This 2004-04-27 15:13:33 +00:00
CorrelatedExprs.cpp Remove use of the ConstantHandling interfaces 2004-01-12 19:12:50 +00:00
DCE.cpp Changes to fix up the inst_iterator to pass to boost iterator checks. This 2004-04-27 15:13:33 +00:00
DecomposeMultiDimRefs.cpp Finegrainify namespacification 2004-01-09 06:02:20 +00:00
GCSE.cpp Add support for replacement of formal arguments with simpler expressions. 2004-05-23 21:19:55 +00:00
IndVarSimplify.cpp Move the scev expansion code into this pass, where it belongs. There is 2004-04-23 21:29:48 +00:00
InstructionCombining.cpp Fix a bug in my checkin from last night that caused miscompilations of 2004-06-10 02:33:20 +00:00
LICM.cpp Adjust to the changes in the AliasSetTracker interface 2004-05-23 21:20:19 +00:00
LoopUnroll.cpp Fix a nasty bug that caused us to unroll EXTREMELY large loops due to overflow 2004-05-13 20:43:31 +00:00
LoopUnswitch.cpp Initial checkin of a simple loop unswitching pass. It still needs work, 2004-04-19 18:07:02 +00:00
LowerGC.cpp Spelling people's names right is kinda important 2004-05-23 21:27:29 +00:00
Makefile Added LLVM copyright notice to Makefiles. 2003-10-20 22:26:57 +00:00
PiNodeInsertion.cpp Finegrainify namespacification 2004-01-09 06:02:20 +00:00
PRE.cpp Finegrainify namespacification 2004-01-09 06:02:20 +00:00
Reassociate.cpp Finegrainify namespacification 2004-01-09 06:02:20 +00:00
ScalarReplAggregates.cpp Support getelementptr instructions which use uint's to index into structure 2004-04-05 01:30:19 +00:00
SCCP.cpp Add SCCP support for constant folding calls, implementing: 2004-04-13 19:43:54 +00:00
SimplifyCFG.cpp Finegrainify namespacification 2004-01-09 06:02:20 +00:00
SymbolStripping.cpp Make this pass simply invoke SymbolTable::strip(). 2004-05-25 08:51:25 +00:00
TailDuplication.cpp Remove unused header file. 2004-05-25 08:51:36 +00:00
TailRecursionElimination.cpp Adjust to the new BasicBlock ctor, which requires a function parameter 2004-02-04 03:58:28 +00:00