2007-04-16 17:36:08 +00:00
|
|
|
; RUN: llvm-upgrade < %s | llvm-as | \
|
|
|
|
; RUN: opt -predsimplify -instcombine -simplifycfg | llvm-dis > %t
|
|
|
|
; RUN: grep -v declare %t | not grep fail
|
2007-08-15 13:49:33 +00:00
|
|
|
; RUN: grep -v declare %t | grep pass | count 4
|
2006-08-28 22:44:55 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2006-09-02 19:40:38 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2006-10-22 19:53:27 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2006-09-02 19:40:38 +00:00
|
|
|
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
|
|
|
|
}
|
2006-08-28 22:44:55 +00:00
|
|
|
|
|
|
|
declare void %fail(...)
|
|
|
|
|
|
|
|
declare void %pass(...)
|