llvm-6502/test/Transforms/PredicateSimplifier/predsimplify.ll

310 lines
5.0 KiB
LLVM
Raw Normal View History

; RUN: llvm-upgrade < %s | llvm-as | \
; RUN: opt -predsimplify -instcombine -simplifycfg | llvm-dis > %t
; RUN: grep -v declare %t | not grep fail
; RUN: grep -v declare %t | grep pass | count 4
void %test1(int %x) {
entry:
%A = seteq int %x, 0
br bool %A, label %then.1, label %else.1
then.1:
%B = seteq int %x, 1
br bool %B, label %then.2, label %else.1
then.2:
call void (...)* %fail( )
ret void
else.1:
ret void
}
void %test2(int %x) {
entry:
%A = seteq int %x, 0
%B = seteq int %x, 1
br bool %A, label %then.1, label %else.1
then.1:
br bool %B, label %then.2, label %else.1
then.2:
call void (...)* %fail( )
ret void
else.1:
ret void
}
void %test3(int %x) {
entry:
%A = seteq int %x, 0
%B = seteq int %x, 1
br bool %A, label %then.1, label %else.1
then.1:
br bool %B, label %then.2, label %else.1
then.2:
call void (...)* %fail( )
ret void
else.1:
ret void
}
void %test4(int %x, int %y) {
entry:
%A = seteq int %x, 0
%B = seteq int %y, 0
%C = and bool %A, %B
br bool %C, label %then.1, label %else.1
then.1:
%D = seteq int %x, 0
br bool %D, label %then.2, label %else.2
then.2:
%E = seteq int %y, 0
br bool %E, label %else.1, label %else.2
else.1:
ret void
else.2:
call void (...)* %fail( )
ret void
}
void %test5(int %x) {
entry:
%A = seteq int %x, 0
br bool %A, label %then.1, label %else.1
then.1:
ret void
then.2:
call void (...)* %fail( )
ret void
else.1:
%B = seteq int %x, 0
br bool %B, label %then.2, label %then.1
}
void %test6(int %x, int %y) {
entry:
%A = seteq int %x, 0
%B = seteq int %y, 0
%C = or bool %A, %B
br bool %C, label %then.1, label %else.1
then.1:
ret void
then.2:
call void (...)* %fail( )
ret void
else.1:
%D = seteq int %x, 0
br bool %D, label %then.2, label %else.2
else.2:
%E = setne int %y, 0
br bool %E, label %then.1, label %then.2
}
void %test7(int %x) {
entry:
%A = setne int %x, 0
%B = xor bool %A, true
br bool %B, label %then.1, label %else.1
then.1:
%C = seteq int %x, 1
br bool %C, label %then.2, label %else.1
then.2:
call void (...)* %fail( )
ret void
else.1:
ret void
}
void %test8(int %x) {
entry:
%A = add int %x, 1
%B = seteq int %x, 0
br bool %B, label %then.1, label %then.2
then.1:
%C = seteq int %A, 1
br bool %C, label %then.2, label %else.2
then.2:
ret void
else.2:
call void (...)* %fail( )
ret void
}
void %test9(int %y, int %z) {
entry:
%x = add int %y, %z
%A = seteq int %y, 3
%B = seteq int %z, 5
%C = and bool %A, %B
br bool %C, label %cond_true, label %return
cond_true:
%D = seteq int %x, 8
br bool %D, label %then, label %oops
then:
call void (...)* %pass( )
ret void
oops:
call void (...)* %fail( )
ret void
return:
ret void
}
void %test10() {
entry:
%A = alloca int
%B = seteq int* %A, null
br bool %B, label %cond_true, label %cond_false
cond_true:
call void (...)* %fail ( )
ret void
cond_false:
call void (...)* %pass ( )
ret void
}
void %switch1(int %x) {
entry:
%A = seteq int %x, 10
br bool %A, label %return, label %cond_false
cond_false:
switch int %x, label %return [
int 9, label %then1
int 10, label %then2
]
then1:
call void (...)* %pass( )
ret void
then2:
call void (...)* %fail( )
ret void
return:
ret void
}
void %switch2(int %x) {
entry:
%A = seteq int %x, 10
br bool %A, label %return, label %cond_false
cond_false:
switch int %x, label %return [
int 8, label %then1
int 9, label %then1
int 10, label %then1
]
then1:
%B = setne int %x, 8
br bool %B, label %then2, label %return
then2:
call void (...)* %pass( )
ret void
return:
ret void
}
void %switch3(int %x) {
entry:
%A = seteq int %x, 10
br bool %A, label %return, label %cond_false
cond_false:
switch int %x, label %return [
int 9, label %then1
int 10, label %then1
]
then1:
%B = seteq int %x, 9
br bool %B, label %return, label %oops
oops:
call void (...)* %fail( )
ret void
return:
ret void
}
void %switch4(int %x) {
entry:
%A = seteq int %x, 10
br bool %A, label %then1, label %cond_false
cond_false:
switch int %x, label %default [
int 9, label %then1
int 10, label %then2
]
then1:
ret void
then2:
ret void
default:
%B = seteq int %x, 9
br bool %B, label %oops, label %then1
oops:
call void (...)* %fail( )
ret void
}
void %select1(int %x) {
entry:
%A = seteq int %x, 10
%B = select bool %A, int 1, int 2
%C = seteq int %B, 1
br bool %C, label %then, label %else
then:
br bool %A, label %return, label %oops
else:
br bool %A, label %oops, label %return
oops:
call void (...)* %fail( )
ret void
return:
ret void
}
void %select2(int %x) {
entry:
%A = seteq int %x, 10
%B = select bool %A, int 1, int 2
%C = seteq int %B, 1
br bool %A, label %then, label %else
then:
br bool %C, label %return, label %oops
else:
br bool %C, label %oops, label %return
oops:
call void (...)* %fail( )
ret void
return:
ret void
}
declare void %fail(...)
declare void %pass(...)