Checking testcases for cee pass

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3764 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2002-09-16 19:08:36 +00:00
parent 8e2e5f74da
commit 876a75c79e
3 changed files with 186 additions and 0 deletions

View File

@ -0,0 +1,10 @@
LEVEL = ../../../..
include $(LEVEL)/test/Makefile.tests
TESTS := $(wildcard *.ll)
all:: $(addprefix Output/, $(TESTS:%.ll=%.ll.out))
Output/%.ll.out: %.ll Output/.dir $(LOPT)
-$(TESTRUNR) $<

View File

@ -0,0 +1,138 @@
; RUN: if as < %s | opt -cee -constprop -instcombine -dce | dis | grep 'REMOVE'
; RUN: then exit 1
; RUN: else exit 0
; RUN: fi
int %test1(int %A) {
%cond = seteq int %A, 40
br bool %cond, label %T, label %F
T:
%REMOVE = add int %A, 2 ; Should become = 42
ret int %REMOVE
F:
ret int 8
}
bool %test2(int %A) {
%cond = seteq int %A, 40
br bool %cond, label %T, label %F
T:
%REMOVE = seteq int %A, 2 ; Should become = false
ret bool %REMOVE
F:
ret bool false
}
bool %test3(int %A) {
%cond = setlt int %A, 40
br bool %cond, label %T, label %F
T:
%REMOVE = setgt int %A, 47 ; Should become = false
ret bool %REMOVE
F:
%REMOVE2 = setge int %A, 40 ; Should become = true
ret bool %REMOVE2
}
bool %test4(int %A) {
%cond = setlt int %A, 40
br bool %cond, label %T, label %F
T:
%REMOVE = setgt int %A, 47 ; Should become = false
ret bool %REMOVE
F:
ret bool false
}
int %test5(int %A, int %B) {
%cond = setne int %A, %B
br bool %cond, label %F, label %T
T:
%C = sub int %A, %B ; = 0
ret int %C
F:
ret int 0
}
bool %test6(int %A) {
%REMOVE = setlt int %A, 47 ; Should become dead
%cond = setlt int %A, 40
br bool %cond, label %T, label %F
T:
ret bool %REMOVE ;; == true
F:
ret bool false
}
bool %test7(int %A) {
%cond = setlt int %A, 40
br bool %cond, label %T, label %F
T:
%REMOVE = xor bool %cond, true
ret bool %REMOVE
F:
ret bool false
}
; Test that and expressions are handled...
bool %test8(int %A, int %B) {
%cond1 = setle int %A, 7
%cond2 = setle int %B, 7
%cond = and bool %cond1, %cond2
br bool %cond, label %T, label %F
T:
%REMOVE1 = seteq int %A, 9 ; false
%REMOVE2 = setge int %B, 9 ; false
%REMOVE = or bool %REMOVE1, %REMOVE2 ; false
ret bool %REMOVE
F:
ret bool false
}
; Test that or expressions are handled...
bool %test9(int %A, int %B) {
%cond1 = setle int %A, 7
%cond2 = setle int %B, 7
%cond = or bool %cond1, %cond2
br bool %cond, label %T, label %F
T:
ret bool false
F:
%REMOVE1 = setge int %A, 8 ; true
%REMOVE2 = setge int %B, 8 ; true
%REMOVE = or bool %REMOVE1, %REMOVE2 ; true
ret bool %REMOVE
}
bool %test10(int %A) {
%cond = setle int %A, 7
br bool %cond, label %T, label %F
T:
ret bool false
F:
%REMOVE = setge int %A, 8
ret bool %REMOVE
}
; Implement correlated comparisons against non-constants
bool %test11(int %A, int %B) {
%cond = setlt int %A, %B
br bool %cond, label %T, label %F
T:
%REMOVE1 = seteq int %A, %B ; false
%REMOVE2 = setle int %A, %B ; true
%cond2 = and bool %REMOVE1, %REMOVE2
ret bool %cond2
F:
ret bool true
}
bool %test12(int %A) {
%cond = setlt int %A, 0
br bool %cond, label %T, label %F
T:
%REMOVE = setne int %A, 0 ; true
ret bool %REMOVE
F:
ret bool false
}

View File

@ -0,0 +1,38 @@
; RUN: if as < %s | opt -cee -simplifycfg | dis | grep 'REMOVE'
; RUN: then exit 1
; RUN: else exit 0
; RUN: fi
implementation
declare void %foo(int)
void %test(int %A) {
bb1: ;[#uses=0]
%cond212 = setgt int %A, 9 ; <bool> [#uses=1]
br bool %cond212, label %REMOVEbb3, label %bb2
bb2: ;[#uses=1]
call void %foo( int 123 )
br label %REMOVEbb3
REMOVEbb3: ;[#uses=2]
%cond217 = setle int %A, 9 ; <bool> [#uses=1]
br bool %cond217, label %REMOVEbb5, label %bb4
bb4: ;[#uses=1]
call void %foo( int 234 )
br label %REMOVEbb5
REMOVEbb5: ;[#uses=2]
%cond222 = setgt int %A, 9 ; <bool> [#uses=1]
br bool %cond222, label %bb7, label %REMOVEbb6
REMOVEbb6: ;[#uses=1]
call void %foo( int 456 )
br label %bb7
bb7: ;[#uses=2]
ret void
}