Remove llvm-upgrade and update tests.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48137 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Tanya Lattner 2008-03-10 07:21:50 +00:00
parent f79e60649a
commit ceca194c43
115 changed files with 2565 additions and 3126 deletions

View File

@ -1,166 +1,147 @@
;; RUN: llvm-upgrade < %s | llvm-as | llc
;; RUN: llvm-as < %s | llc
%llvm.dbg.anchor.type = type { i32, i32 }
%llvm.dbg.basictype.type = type { i32, { }*, i8*, { }*, i32, i64, i64, i64, i32, i32 }
%llvm.dbg.compile_unit.type = type { i32, { }*, i32, i8*, i8*, i8* }
%llvm.dbg.global_variable.type = type { i32, { }*, { }*, i8*, i8*, i8*, { }*, i32, { }*, i1, i1, { }* }
%llvm.dbg.subprogram.type = type { i32, { }*, { }*, i8*, i8*, i8*, { }*, i32, { }*, i1, i1 }
%llvm.dbg.variable.type = type { i32, { }*, i8*, { }*, i32, { }* }
@llvm.dbg.subprograms = linkonce constant %llvm.dbg.anchor.type { i32 393216, i32 46 }, section "llvm.metadata" ; <%llvm.dbg.anchor.type*> [#uses=1]
@llvm.dbg.compile_units = linkonce constant %llvm.dbg.anchor.type { i32 393216, i32 17 }, section "llvm.metadata" ; <%llvm.dbg.anchor.type*> [#uses=1]
@llvm.dbg.global_variables = linkonce constant %llvm.dbg.anchor.type { i32 393216, i32 52 }, section "llvm.metadata" ; <%llvm.dbg.anchor.type*> [#uses=1]
@llvm.dbg.subprogram = internal constant %llvm.dbg.subprogram.type {
i32 393262,
{ }* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to { }*),
{ }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*),
i8* getelementptr ([4 x i8]* @str, i32 0, i32 0),
i8* getelementptr ([4 x i8]* @str, i32 0, i32 0),
i8* null,
{ }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*),
i32 4,
{ }* null,
i1 false,
i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1]
@str = internal constant [4 x i8] c"foo\00", section "llvm.metadata" ; <[4 x i8]*> [#uses=1]
@llvm.dbg.compile_unit = internal constant %llvm.dbg.compile_unit.type {
i32 393233,
{ }* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.compile_units to { }*),
i32 1,
i8* getelementptr ([11 x i8]* @str1, i32 0, i32 0),
i8* getelementptr ([50 x i8]* @str2, i32 0, i32 0),
i8* getelementptr ([45 x i8]* @str3, i32 0, i32 0) }, section "llvm.metadata" ; <%llvm.dbg.compile_unit.type*> [#uses=1]
@str1 = internal constant [11 x i8] c"funccall.c\00", section "llvm.metadata" ; <[11 x i8]*> [#uses=1]
@str2 = internal constant [50 x i8] c"/Volumes/Big2/llvm/llvm/test/Regression/Debugger/\00", section "llvm.metadata" ; <[50 x i8]*> [#uses=1]
@str3 = internal constant [45 x i8] c"4.0.1 LLVM (Apple Computer, Inc. build 5421)\00", section "llvm.metadata" ; <[45 x i8]*> [#uses=1]
@llvm.dbg.variable = internal constant %llvm.dbg.variable.type {
i32 393472,
{ }* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram to { }*),
i8* getelementptr ([2 x i8]* @str4, i32 0, i32 0),
{ }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*),
i32 5,
{ }* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype to { }*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1]
@str4 = internal constant [2 x i8] c"t\00", section "llvm.metadata" ; <[2 x i8]*> [#uses=1]
@llvm.dbg.basictype = internal constant %llvm.dbg.basictype.type {
i32 393252,
{ }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*),
i8* getelementptr ([4 x i8]* @str15, i32 0, i32 0),
{ }* null,
i32 0,
i64 32,
i64 32,
i64 0,
i32 0,
i32 5 }, section "llvm.metadata" ; <%llvm.dbg.basictype.type*> [#uses=1]
@str15 = internal constant [4 x i8] c"int\00", section "llvm.metadata" ; <[4 x i8]*> [#uses=1]
@llvm.dbg.subprogram2 = internal constant %llvm.dbg.subprogram.type {
i32 393262,
{ }* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.subprograms to { }*),
{ }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*),
i8* getelementptr ([5 x i8]* @str6, i32 0, i32 0),
i8* getelementptr ([5 x i8]* @str6, i32 0, i32 0),
i8* null,
{ }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*),
i32 8,
{ }* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype to { }*),
i1 false,
i1 true }, section "llvm.metadata" ; <%llvm.dbg.subprogram.type*> [#uses=1]
@str6 = internal constant [5 x i8] c"main\00", section "llvm.metadata" ; <[5 x i8]*> [#uses=1]
@llvm.dbg.variable3 = internal constant %llvm.dbg.variable.type {
i32 393474,
{ }* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram2 to { }*),
i8* getelementptr ([7 x i8]* @str7, i32 0, i32 0),
{ }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*),
i32 8,
{ }* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype to { }*) }, section "llvm.metadata" ; <%llvm.dbg.variable.type*> [#uses=1]
@str7 = internal constant [7 x i8] c"retval\00", section "llvm.metadata" ; <[7 x i8]*> [#uses=1]
@llvm.dbg.global_variable = internal constant %llvm.dbg.global_variable.type {
i32 393268,
{ }* bitcast (%llvm.dbg.anchor.type* @llvm.dbg.global_variables to { }*),
{ }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*),
i8* getelementptr ([2 x i8]* @str4, i32 0, i32 0),
i8* getelementptr ([2 x i8]* @str4, i32 0, i32 0),
i8* null,
{ }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*),
i32 2,
{ }* bitcast (%llvm.dbg.basictype.type* @llvm.dbg.basictype to { }*),
i1 true,
i1 true,
{ }* bitcast (i32* @q to { }*) }, section "llvm.metadata" ; <%llvm.dbg.global_variable.type*> [#uses=0]
@str4.upgrd.1 = internal constant [2 x i8] c"q\00", section "llvm.metadata" ; <[2 x i8]*> [#uses=0]
@q = internal global i32 0 ; <i32*> [#uses=7]
;; Debugger type declarations
%llvm.dbg.anchor.type = type { uint, uint }
%llvm.dbg.basictype.type = type { uint, { }*, sbyte*, { }*, uint, ulong, ulong, ulong, uint, uint }
%llvm.dbg.compile_unit.type = type { uint, { }*, uint, sbyte*, sbyte*, sbyte* }
%llvm.dbg.global_variable.type = type { uint, { }*, { }*, sbyte*, sbyte*, sbyte*, { }*, uint, { }*, bool, bool, { }* }
%llvm.dbg.subprogram.type = type { uint, { }*, { }*, sbyte*, sbyte*, sbyte*, { }*, uint, { }*, bool, bool }
%llvm.dbg.variable.type = type { uint, { }*, sbyte*, { }*, uint, { }* }
declare void @llvm.dbg.func.start({ }*)
;; Debugger intrinsic declarations...
declare void %llvm.dbg.func.start({ }*)
declare void %llvm.dbg.stoppoint(uint, uint, { }*)
declare void %llvm.dbg.declare({ }*, { }*)
declare void %llvm.dbg.region.start({ }*)
declare void %llvm.dbg.region.end({ }*)
declare void @llvm.dbg.stoppoint(i32, i32, { }*)
;; Debugger anchors
%llvm.dbg.subprograms = linkonce constant %llvm.dbg.anchor.type {
uint 393216, ;; DW_TAG_anchor | version(6)
uint 46 }, section "llvm.metadata" ;; DW_TAG_subprogram
%llvm.dbg.compile_units = linkonce constant %llvm.dbg.anchor.type {
uint 393216, ;; DW_TAG_anchor | version(6)
uint 17 }, section "llvm.metadata" ;; DW_TAG_compile_unit
%llvm.dbg.global_variables = linkonce constant %llvm.dbg.anchor.type {
uint 393216, ;; DW_TAG_anchor | version(6)
uint 52 }, section "llvm.metadata" ;; DW_TAG_variable
declare void @llvm.dbg.declare({ }*, { }*)
;; Debug info
%llvm.dbg.subprogram = internal constant %llvm.dbg.subprogram.type {
uint 393262, ;; DW_TAG_subprogram | version(6)
{ }* bitcast (%llvm.dbg.anchor.type* %llvm.dbg.subprograms to { }*), ;; Anchor
{ }* bitcast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit to { }*),;; Context
sbyte* getelementptr ([4 x sbyte]* %str, int 0, int 0), ;; Name
sbyte* getelementptr ([4 x sbyte]* %str, int 0, int 0), ;; Fully quanlified name
sbyte* null, ;; Linkage name
{ }* bitcast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit to { }*),;; Compile unit
uint 4, ;; Line number
{ }* null, ;; Type descriptor
bool false, ;; Static?
bool true }, section "llvm.metadata" ;; External?
%str = internal constant [4 x sbyte] c"foo\00", section "llvm.metadata"
%llvm.dbg.compile_unit = internal constant %llvm.dbg.compile_unit.type {
uint 393233, ;; DW_TAG_compile_unit | version(6)
{ }* bitcast (%llvm.dbg.anchor.type* %llvm.dbg.compile_units to { }*), ;; Anchor
uint 1, ;; Language
sbyte* getelementptr ([11 x sbyte]* %str, int 0, int 0), ;; Source file
sbyte* getelementptr ([50 x sbyte]* %str, int 0, int 0), ;; Source file directory
sbyte* getelementptr ([45 x sbyte]* %str, int 0, int 0) }, section "llvm.metadata" ;; Produceer
%str = internal constant [11 x sbyte] c"funccall.c\00", section "llvm.metadata"
%str = internal constant [50 x sbyte] c"/Volumes/Big2/llvm/llvm/test/Regression/Debugger/\00", section "llvm.metadata"
%str = internal constant [45 x sbyte] c"4.0.1 LLVM (Apple Computer, Inc. build 5421)\00", section "llvm.metadata"
declare void @llvm.dbg.region.start({ }*)
%llvm.dbg.variable = internal constant %llvm.dbg.variable.type {
uint 393472, ;; DW_TAG_auto_variable | version(6)
{ }* bitcast (%llvm.dbg.subprogram.type* %llvm.dbg.subprogram to { }*), ;; Context
sbyte* getelementptr ([2 x sbyte]* %str, int 0, int 0), ;; Name
{ }* bitcast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit to { }*),;; Compile unit
uint 5, ;; Line number
{ }* bitcast (%llvm.dbg.basictype.type* %llvm.dbg.basictype to { }*) }, section "llvm.metadata" ;; Type
%str = internal constant [2 x sbyte] c"t\00", section "llvm.metadata"
declare void @llvm.dbg.region.end({ }*)
%llvm.dbg.basictype = internal constant %llvm.dbg.basictype.type {
uint 393252, ;; DW_TAG_base_type | version(6)
{ }* bitcast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit to { }*),;; Context
sbyte* getelementptr ([4 x sbyte]* %str1, int 0, int 0), ;; Name
{ }* null, ;; Compile Unit
uint 0, ;; Line number
ulong 32, ;; Size in bits
ulong 32, ;; Align in bits
ulong 0, ;; Offset in bits
uint 0, ;; Flags
uint 5 }, section "llvm.metadata" ;; Basic type encoding
%str1 = internal constant [4 x sbyte] c"int\00", section "llvm.metadata"
%llvm.dbg.subprogram2 = internal constant %llvm.dbg.subprogram.type {
uint 393262, ;; DW_TAG_subprogram | version(6)
{ }* bitcast (%llvm.dbg.anchor.type* %llvm.dbg.subprograms to { }*), ;; Anchor
{ }* bitcast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit to { }*),;; Context
sbyte* getelementptr ([5 x sbyte]* %str, int 0, int 0), ;; Name
sbyte* getelementptr ([5 x sbyte]* %str, int 0, int 0), ;; Fully quanlified name
sbyte* null, ;; Linkage name
{ }* bitcast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit to { }*),;; Compile unit
uint 8, ;; Line number
{ }* bitcast (%llvm.dbg.basictype.type* %llvm.dbg.basictype to { }*), ;; Type descriptor
bool false, ;; Static?
bool true }, section "llvm.metadata" ;; External?
%str = internal constant [5 x sbyte] c"main\00", section "llvm.metadata"
%llvm.dbg.variable3 = internal constant %llvm.dbg.variable.type {
uint 393474, ;; DW_TAG_return_variable | version(6)
{ }* bitcast (%llvm.dbg.subprogram.type* %llvm.dbg.subprogram2 to { }*), ;; Context
sbyte* getelementptr ([7 x sbyte]* %str, int 0, int 0), ;; Name
{ }* bitcast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit to { }*),;; Compile unit
uint 8, ;; Line number
{ }* bitcast (%llvm.dbg.basictype.type* %llvm.dbg.basictype to { }*) }, section "llvm.metadata" ;; Type
%str = internal constant [7 x sbyte] c"retval\00", section "llvm.metadata"
%llvm.dbg.global_variable = internal constant %llvm.dbg.global_variable.type {
uint 393268, ;; DW_TAG_variable | version(6)
{ }* bitcast (%llvm.dbg.anchor.type* %llvm.dbg.global_variables to { }*), ;; Anchor
{ }* bitcast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit to { }*),;; Context
sbyte* getelementptr ([2 x sbyte]* %str4, int 0, int 0), ;; Name
sbyte* getelementptr ([2 x sbyte]* %str4, int 0, int 0), ;; Fully qualified name
sbyte* null, ;; Linkage name
{ }* bitcast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit to { }*),;; Compile unit
uint 2, ;; Line number
{ }* bitcast (%llvm.dbg.basictype.type* %llvm.dbg.basictype to { }*), ;; Type
bool true, ;; Static?
bool true, ;; External?
{ }* bitcast (int* %q to { }*) }, section "llvm.metadata" ;; Variable
%str4 = internal constant [2 x sbyte] c"q\00", section "llvm.metadata"
;; Global
%q = internal global int 0
implementation
void %foo() {
define void @foo() {
entry:
%t = alloca int, align 4
"alloca point" = bitcast int 0 to int
call void %llvm.dbg.func.start( { }* bitcast (%llvm.dbg.subprogram.type* %llvm.dbg.subprogram to { }*) )
call void %llvm.dbg.stoppoint( uint 4, uint 0, { }* bitcast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit to { }*) )
%t = bitcast int* %t to { }*
call void %llvm.dbg.declare( { }* %t, { }* bitcast (%llvm.dbg.variable.type* %llvm.dbg.variable to { }*) )
call void %llvm.dbg.stoppoint( uint 5, uint 0, { }* bitcast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit to { }*) )
%tmp = load int* %q
store int %tmp, int* %t
call void %llvm.dbg.stoppoint( uint 6, uint 0, { }* bitcast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit to { }*) )
%tmp1 = load int* %t
%tmp2 = add int %tmp1, 1
store int %tmp2, int* %q
call void %llvm.dbg.stoppoint( uint 7, uint 0, { }* bitcast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit to { }*) )
call void %llvm.dbg.region.end( { }* bitcast (%llvm.dbg.subprogram.type* %llvm.dbg.subprogram to { }*) )
%t = alloca i32, align 4 ; <i32*> [#uses=3]
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
call void @llvm.dbg.func.start( { }* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram to { }*) )
call void @llvm.dbg.stoppoint( i32 4, i32 0, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*) )
%t.upgrd.2 = bitcast i32* %t to { }* ; <{ }*> [#uses=1]
call void @llvm.dbg.declare( { }* %t.upgrd.2, { }* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable to { }*) )
call void @llvm.dbg.stoppoint( i32 5, i32 0, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*) )
%tmp = load i32* @q ; <i32> [#uses=1]
store i32 %tmp, i32* %t
call void @llvm.dbg.stoppoint( i32 6, i32 0, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*) )
%tmp1 = load i32* %t ; <i32> [#uses=1]
%tmp2 = add i32 %tmp1, 1 ; <i32> [#uses=1]
store i32 %tmp2, i32* @q
call void @llvm.dbg.stoppoint( i32 7, i32 0, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*) )
call void @llvm.dbg.region.end( { }* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram to { }*) )
ret void
}
int %main() {
define i32 @main() {
entry:
%retval = alloca int, align 4
%tmp = alloca int, align 4
"alloca point" = bitcast int 0 to int
call void %llvm.dbg.func.start( { }* bitcast (%llvm.dbg.subprogram.type* %llvm.dbg.subprogram2 to { }*) )
call void %llvm.dbg.stoppoint( uint 8, uint 0, { }* bitcast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit to { }*) )
%retval = bitcast int* %retval to { }*
call void %llvm.dbg.declare( { }* %retval, { }* bitcast (%llvm.dbg.variable.type* %llvm.dbg.variable3 to { }*) )
call void %llvm.dbg.stoppoint( uint 9, uint 0, { }* bitcast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit to { }*) )
store int 0, int* %q
call void %llvm.dbg.stoppoint( uint 10, uint 0, { }* bitcast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit to { }*) )
call void (...)* bitcast (void ()* %foo to void (...)*)( )
call void %llvm.dbg.stoppoint( uint 11, uint 0, { }* bitcast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit to { }*) )
%tmp = load int* %q
%tmp1 = sub int %tmp, 1
store int %tmp1, int* %q
call void %llvm.dbg.stoppoint( uint 13, uint 0, { }* bitcast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit to { }*) )
%tmp2 = load int* %q
store int %tmp2, int* %tmp
%tmp3 = load int* %tmp
store int %tmp3, int* %retval
%retval = load int* %retval
call void %llvm.dbg.stoppoint( uint 14, uint 0, { }* bitcast (%llvm.dbg.compile_unit.type* %llvm.dbg.compile_unit to { }*) )
call void %llvm.dbg.region.end( { }* bitcast (%llvm.dbg.subprogram.type* %llvm.dbg.subprogram2 to { }*) )
ret int %retval
%retval = alloca i32, align 4 ; <i32*> [#uses=3]
%tmp = alloca i32, align 4 ; <i32*> [#uses=2]
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
call void @llvm.dbg.func.start( { }* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram2 to { }*) )
call void @llvm.dbg.stoppoint( i32 8, i32 0, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*) )
%retval.upgrd.3 = bitcast i32* %retval to { }* ; <{ }*> [#uses=1]
call void @llvm.dbg.declare( { }* %retval.upgrd.3, { }* bitcast (%llvm.dbg.variable.type* @llvm.dbg.variable3 to { }*) )
call void @llvm.dbg.stoppoint( i32 9, i32 0, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*) )
store i32 0, i32* @q
call void @llvm.dbg.stoppoint( i32 10, i32 0, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*) )
call void (...)* bitcast (void ()* @foo to void (...)*)( )
call void @llvm.dbg.stoppoint( i32 11, i32 0, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*) )
%tmp.upgrd.4 = load i32* @q ; <i32> [#uses=1]
%tmp1 = sub i32 %tmp.upgrd.4, 1 ; <i32> [#uses=1]
store i32 %tmp1, i32* @q
call void @llvm.dbg.stoppoint( i32 13, i32 0, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*) )
%tmp2 = load i32* @q ; <i32> [#uses=1]
store i32 %tmp2, i32* %tmp
%tmp3 = load i32* %tmp ; <i32> [#uses=1]
store i32 %tmp3, i32* %retval
%retval.upgrd.5 = load i32* %retval ; <i32> [#uses=1]
call void @llvm.dbg.stoppoint( i32 14, i32 0, { }* bitcast (%llvm.dbg.compile_unit.type* @llvm.dbg.compile_unit to { }*) )
call void @llvm.dbg.region.end( { }* bitcast (%llvm.dbg.subprogram.type* @llvm.dbg.subprogram2 to { }*) )
ret i32 %retval.upgrd.5
}

View File

@ -1,47 +1,38 @@
; RUN: llvm-upgrade %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
%.LC0 = internal global [10 x sbyte] c"argc: %d\0A\00"
@.LC0 = internal global [10 x i8] c"argc: %d\0A\00" ; <[10 x i8]*> [#uses=1]
implementation ; Functions:
declare i32 @puts(i8*)
declare int %puts(sbyte*)
void %getoptions(int* %argc) {
bb0: ; No predecessors!
define void @getoptions(i32* %argc) {
bb0:
ret void
}
declare int %printf(sbyte*, ...)
int %main(int %argc, sbyte** %argv) {
bb0: ; No predecessors!
call int (sbyte*, ...)* %printf( sbyte* getelementptr ([10 x sbyte]* %.LC0, long 0, long 0), int %argc)
%cast224 = cast sbyte** %argv to sbyte* ; <sbyte*> [#uses=1]
%local = alloca sbyte* ; <sbyte**> [#uses=3]
store sbyte* %cast224, sbyte** %local
%cond226 = setle int %argc, 0 ; <bool> [#uses=1]
br bool %cond226, label %bb3, label %bb2
declare i32 @printf(i8*, ...)
define i32 @main(i32 %argc, i8** %argv) {
bb0:
call i32 (i8*, ...)* @printf( i8* getelementptr ([10 x i8]* @.LC0, i64 0, i64 0), i32 %argc ) ; <i32>:0 [#uses=0]
%cast224 = bitcast i8** %argv to i8* ; <i8*> [#uses=1]
%local = alloca i8* ; <i8**> [#uses=3]
store i8* %cast224, i8** %local
%cond226 = icmp sle i32 %argc, 0 ; <i1> [#uses=1]
br i1 %cond226, label %bb3, label %bb2
bb2: ; preds = %bb2, %bb0
%cann-indvar = phi int [ 0, %bb0 ], [ %add1-indvar, %bb2 ] ; <int> [#uses=2]
%add1-indvar = add int %cann-indvar, 1 ; <int> [#uses=2]
%cann-indvar-idxcast = cast int %cann-indvar to long ; <long> [#uses=1]
;%reg115 = load sbyte** %local ; <sbyte*> [#uses=1]
;%cann-indvar-idxcast-scale = mul long %cann-indvar-idxcast, 8 ; <long> [#uses=1]
;%reg232 = getelementptr sbyte* %reg115, long %cann-indvar-idxcast-scale ; <sbyte*> [#uses=1]
;%cast235 = cast sbyte* %reg232 to sbyte** ; <sbyte**> [#uses=1]
%CT = cast sbyte** %local to sbyte***
%reg115 = load sbyte*** %CT
%cast235 = getelementptr sbyte** %reg115, long %cann-indvar-idxcast
%reg117 = load sbyte** %cast235 ; <sbyte*> [#uses=1]
%reg236 = call int %puts( sbyte* %reg117 ) ; <int> [#uses=0]
%cond239 = setlt int %add1-indvar, %argc ; <bool> [#uses=1]
br bool %cond239, label %bb2, label %bb3
%cann-indvar = phi i32 [ 0, %bb0 ], [ %add1-indvar, %bb2 ] ; <i32> [#uses=2]
%add1-indvar = add i32 %cann-indvar, 1 ; <i32> [#uses=2]
%cann-indvar-idxcast = sext i32 %cann-indvar to i64 ; <i64> [#uses=1]
%CT = bitcast i8** %local to i8*** ; <i8***> [#uses=1]
%reg115 = load i8*** %CT ; <i8**> [#uses=1]
%cast235 = getelementptr i8** %reg115, i64 %cann-indvar-idxcast ; <i8**> [#uses=1]
%reg117 = load i8** %cast235 ; <i8*> [#uses=1]
%reg236 = call i32 @puts( i8* %reg117 ) ; <i32> [#uses=0]
%cond239 = icmp slt i32 %add1-indvar, %argc ; <i1> [#uses=1]
br i1 %cond239, label %bb2, label %bb3
bb3: ; preds = %bb2, %bb0
%cast243 = cast sbyte** %local to int* ; <int*> [#uses=1]
call void %getoptions( int* %cast243 )
ret int 0
%cast243 = bitcast i8** %local to i32* ; <i32*> [#uses=1]
call void @getoptions( i32* %cast243 )
ret i32 0
}

View File

@ -1,16 +1,14 @@
; RUN: llvm-upgrade %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
implementation ; Functions:
int %foo(int %X, int %Y, double %A) {
%cond212 = setne double %A, 1.000000e+00 ; <bool> [#uses=1]
%cast110 = cast bool %cond212 to int ; <int> [#uses=1]
ret int %cast110
define i32 @foo(i32 %X, i32 %Y, double %A) {
%cond212 = fcmp une double %A, 1.000000e+00 ; <i1> [#uses=1]
%cast110 = zext i1 %cond212 to i32 ; <i32> [#uses=1]
ret i32 %cast110
}
int %main() {
%reg212 = call int %foo( int 0, int 1, double 1.000000e+00 ) ; <int> [#uses=1]
ret int %reg212
define i32 @main() {
%reg212 = call i32 @foo( i32 0, i32 1, double 1.000000e+00 ) ; <i32> [#uses=1]
ret i32 %reg212
}

View File

@ -1,25 +1,21 @@
; RUN: llvm-upgrade < %s | llvm-as -o %t.bc -f
; RUN: llvm-as < %s -o %t.bc -f
; RUN: lli %t.bc > /dev/null
implementation
int %main() {
call int %mylog(int 4)
ret int 0
define i32 @main() {
call i32 @mylog( i32 4 ) ; <i32>:1 [#uses=0]
ret i32 0
}
internal int %mylog(int %num) {
bb0: ; No predecessors!
define internal i32 @mylog(i32 %num) {
bb0:
br label %bb2
bb2:
%reg112 = phi int [ 10, %bb2 ], [ 1, %bb0 ]
%cann-indvar = phi int [ %cann-indvar, %bb2 ], [0, %bb0]
%reg114 = add int %reg112, 1
%cond222 = setlt int %reg114, %num
br bool %cond222, label %bb2, label %bb3
bb3: ; preds = %bb2, %bb0
ret int %reg114
bb2: ; preds = %bb2, %bb0
%reg112 = phi i32 [ 10, %bb2 ], [ 1, %bb0 ] ; <i32> [#uses=1]
%cann-indvar = phi i32 [ %cann-indvar, %bb2 ], [ 0, %bb0 ] ; <i32> [#uses=1]
%reg114 = add i32 %reg112, 1 ; <i32> [#uses=2]
%cond222 = icmp slt i32 %reg114, %num ; <i1> [#uses=1]
br i1 %cond222, label %bb2, label %bb3
bb3: ; preds = %bb2
ret i32 %reg114
}

View File

@ -1,11 +1,13 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
int %main() {
define i32 @main() {
; <label>:0
br label %Loop
Loop:
%X = phi int [0, %0], [1, %Loop]
br bool true, label %Out, label %Loop
Out:
ret int %X
Loop: ; preds = %Loop, %0
%X = phi i32 [ 0, %0 ], [ 1, %Loop ] ; <i32> [#uses=1]
br i1 true, label %Out, label %Loop
Out: ; preds = %Loop
ret i32 %X
}

View File

@ -1,11 +1,12 @@
; RUN: llvm-upgrade %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
; We were accidentally inverting the signedness of right shifts. Whoops.
int %main() {
%X = shr int -1, ubyte 16
%Y = shr int %X, ubyte 16
%Z = add int %Y, 1
ret int %Z
define i32 @main() {
%X = ashr i32 -1, 16 ; <i32> [#uses=1]
%Y = ashr i32 %X, 16 ; <i32> [#uses=1]
%Z = add i32 %Y, 1 ; <i32> [#uses=1]
ret i32 %Z
}

View File

@ -1,11 +1,11 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
int %main() {
%X = add double 0.0, 1.0
%Y = sub double 0.0, 1.0
%Z = seteq double %X, %Y
add double %Y, 0.0
ret int 0
define i32 @main() {
%X = add double 0.000000e+00, 1.000000e+00 ; <double> [#uses=1]
%Y = sub double 0.000000e+00, 1.000000e+00 ; <double> [#uses=2]
%Z = fcmp oeq double %X, %Y ; <i1> [#uses=0]
add double %Y, 0.000000e+00 ; <double>:1 [#uses=0]
ret i32 0
}

View File

@ -1,19 +1,18 @@
; RUN: llvm-upgrade %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
int %bar(sbyte* %X) {
%P = alloca double ; pointer should be 4 byte aligned!
%R = cast double* %P to int
%A = and int %R, 3
ret int %A
define i32 @bar(i8* %X) {
; pointer should be 4 byte aligned!
%P = alloca double ; <double*> [#uses=1]
%R = ptrtoint double* %P to i32 ; <i32> [#uses=1]
%A = and i32 %R, 3 ; <i32> [#uses=1]
ret i32 %A
}
int %main() {
%SP = alloca sbyte
%X = add uint 0, 0
alloca sbyte, uint %X
call int %bar(sbyte* %SP)
ret int %0
define i32 @main() {
%SP = alloca i8 ; <i8*> [#uses=1]
%X = add i32 0, 0 ; <i32> [#uses=1]
alloca i8, i32 %X ; <i8*>:1 [#uses=0]
call i32 @bar( i8* %SP ) ; <i32>:2 [#uses=1]
ret i32 %2
}

View File

@ -1,20 +1,19 @@
; This testcase shoudl return with an exit code of 1.
;
; RUN: llvm-upgrade < %s | llvm-as | not lli
; RUN: llvm-as < %s | not lli
%test = global long 0
implementation
@test = global i64 0 ; <i64*> [#uses=1]
internal long %test() {
%tmp.0 = load long* %test ; <long> [#uses=1]
%tmp.1 = add long %tmp.0, 1 ; <long> [#uses=1]
ret long %tmp.1
define internal i64 @test.upgrd.1() {
%tmp.0 = load i64* @test ; <i64> [#uses=1]
%tmp.1 = add i64 %tmp.0, 1 ; <i64> [#uses=1]
ret i64 %tmp.1
}
int %main() {
%L = call long %test()
%I = cast long %L to int
ret int %I
define i32 @main() {
%L = call i64 @test.upgrd.1( ) ; <i64> [#uses=1]
%I = trunc i64 %L to i32 ; <i32> [#uses=1]
ret i32 %I
}

View File

@ -1,13 +1,11 @@
; RUN: llvm-upgrade < %s | llvm-as | lli - test
; RUN: llvm-as < %s | lli - test
implementation
declare i32 @puts(i8*)
declare int %puts(sbyte*)
int %main(int %argc.1, sbyte** %argv.1) {
%tmp.5 = getelementptr sbyte** %argv.1, long 1 ; <sbyte**> [#uses=1]
%tmp.6 = load sbyte** %tmp.5 ; <sbyte*> [#uses=1]
%tmp.0 = call int %puts( sbyte* %tmp.6 ) ; <int> [#uses=0]
ret int 0
define i32 @main(i32 %argc.1, i8** %argv.1) {
%tmp.5 = getelementptr i8** %argv.1, i64 1 ; <i8**> [#uses=1]
%tmp.6 = load i8** %tmp.5 ; <i8*> [#uses=1]
%tmp.0 = call i32 @puts( i8* %tmp.6 ) ; <i32> [#uses=0]
ret i32 0
}

View File

@ -1,18 +1,16 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
target endian = little
target pointersize = 32
target datalayout = "e-p:32:32"
implementation
int %main() {
define i32 @main() {
entry:
br label %endif
then:
then: ; No predecessors!
br label %endif
endif:
%x = phi uint [ 4, %entry ], [ 27, %then ]
%result = phi int [ 32, %then ], [ 0, %entry ]
ret int 0
endif: ; preds = %then, %entry
%x = phi i32 [ 4, %entry ], [ 27, %then ] ; <i32> [#uses=0]
%result = phi i32 [ 32, %then ], [ 0, %entry ] ; <i32> [#uses=0]
ret i32 0
}

View File

@ -1,22 +1,20 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
; Testcase distilled from 256.bzip2.
target endian = little
target pointersize = 32
target datalayout = "e-p:32:32"
int %main() {
define i32 @main() {
entry:
br label %loopentry.0
loopentry.0:
%h.0 = phi int [ %tmp.2, %loopentry.0 ], [ -1, %entry ]
%tmp.2 = add int %h.0, 1
%tmp.4 = setne int %tmp.2, 0
br bool %tmp.4, label %loopentry.0, label %loopentry.1
loopentry.1:
%h.1 = phi int [ %tmp.2, %loopentry.0 ]
ret int %h.1
loopentry.0: ; preds = %loopentry.0, %entry
%h.0 = phi i32 [ %tmp.2, %loopentry.0 ], [ -1, %entry ] ; <i32> [#uses=1]
%tmp.2 = add i32 %h.0, 1 ; <i32> [#uses=3]
%tmp.4 = icmp ne i32 %tmp.2, 0 ; <i1> [#uses=1]
br i1 %tmp.4, label %loopentry.0, label %loopentry.1
loopentry.1: ; preds = %loopentry.0
%h.1 = phi i32 [ %tmp.2, %loopentry.0 ] ; <i32> [#uses=1]
ret i32 %h.1
}

View File

@ -1,19 +1,18 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
; Testcase distilled from 256.bzip2.
target endian = little
target pointersize = 32
target datalayout = "e-p:32:32"
int %main() {
define i32 @main() {
entry:
%X = add int 1, -1
%X = add i32 1, -1 ; <i32> [#uses=3]
br label %Next
Next:
%A = phi int [ %X, %entry ]
%B = phi int [ %X, %entry ]
%C = phi int [ %X, %entry ]
ret int %C
Next: ; preds = %entry
%A = phi i32 [ %X, %entry ] ; <i32> [#uses=0]
%B = phi i32 [ %X, %entry ] ; <i32> [#uses=0]
%C = phi i32 [ %X, %entry ] ; <i32> [#uses=1]
ret i32 %C
}

View File

@ -1,12 +1,12 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
; This testcase failed to work because two variable sized allocas confused the
; local register allocator.
int %main(uint %X) {
%A = alloca uint, uint %X
%B = alloca float, uint %X
ret int 0
define i32 @main(i32 %X) {
%A = alloca i32, i32 %X ; <i32*> [#uses=0]
%B = alloca float, i32 %X ; <float*> [#uses=0]
ret i32 0
}

View File

@ -1,4 +1,4 @@
; RUN: llvm-upgrade %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
;
@ -9,15 +9,14 @@
; environment to the main() function.
;
implementation
declare uint %strlen(sbyte*)
declare i32 @strlen(i8*)
int %main(int %argc.1, sbyte** %argv.1, sbyte** %envp.1) {
%tmp.2 = load sbyte** %envp.1
%tmp.3 = call uint %strlen( sbyte* %tmp.2 )
%T = seteq uint %tmp.3, 0
%R = cast bool %T to int
ret int %R
define i32 @main(i32 %argc.1, i8** %argv.1, i8** %envp.1) {
%tmp.2 = load i8** %envp.1 ; <i8*> [#uses=1]
%tmp.3 = call i32 @strlen( i8* %tmp.2 ) ; <i32> [#uses=1]
%T = icmp eq i32 %tmp.3, 0 ; <i1> [#uses=1]
%R = zext i1 %T to i32 ; <i32> [#uses=1]
ret i32 %R
}

View File

@ -1,33 +1,35 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
; This testcase exposes a bug in the local register allocator where it runs out
; of registers (due to too many overlapping live ranges), but then attempts to
; use the ESP register (which is not allocatable) to hold a value.
int %main(uint %A) {
%Ap2 = alloca uint, uint %A ; ESP gets used again...
%B = add uint %A, 1 ; Produce lots of overlapping live ranges
%C = add uint %A, 2
%D = add uint %A, 3
%E = add uint %A, 4
%F = add uint %A, 5
%G = add uint %A, 6
%H = add uint %A, 7
%I = add uint %A, 8
%J = add uint %A, 9
%K = add uint %A, 10
store uint %A, uint *%Ap2 ; Uses of all of the values
store uint %B, uint *%Ap2
store uint %C, uint *%Ap2
store uint %D, uint *%Ap2
store uint %E, uint *%Ap2
store uint %F, uint *%Ap2
store uint %G, uint *%Ap2
store uint %H, uint *%Ap2
store uint %I, uint *%Ap2
store uint %J, uint *%Ap2
store uint %K, uint *%Ap2
ret int 0
define i32 @main(i32 %A) {
; ESP gets used again...
%Ap2 = alloca i32, i32 %A ; <i32*> [#uses=11]
; Produce lots of overlapping live ranges
%B = add i32 %A, 1 ; <i32> [#uses=1]
%C = add i32 %A, 2 ; <i32> [#uses=1]
%D = add i32 %A, 3 ; <i32> [#uses=1]
%E = add i32 %A, 4 ; <i32> [#uses=1]
%F = add i32 %A, 5 ; <i32> [#uses=1]
%G = add i32 %A, 6 ; <i32> [#uses=1]
%H = add i32 %A, 7 ; <i32> [#uses=1]
%I = add i32 %A, 8 ; <i32> [#uses=1]
%J = add i32 %A, 9 ; <i32> [#uses=1]
%K = add i32 %A, 10 ; <i32> [#uses=1]
; Uses of all of the values
store i32 %A, i32* %Ap2
store i32 %B, i32* %Ap2
store i32 %C, i32* %Ap2
store i32 %D, i32* %Ap2
store i32 %E, i32* %Ap2
store i32 %F, i32* %Ap2
store i32 %G, i32* %Ap2
store i32 %H, i32* %Ap2
store i32 %I, i32* %Ap2
store i32 %J, i32* %Ap2
store i32 %K, i32* %Ap2
ret i32 0
}

View File

@ -1,30 +1,24 @@
; RUN: llvm-upgrade %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
%A = global int 0
@A = global i32 0 ; <i32*> [#uses=1]
int %main() {
%Ret = call int %test(bool true, int 0)
ret int %Ret
define i32 @main() {
%Ret = call i32 @test( i1 true, i32 0 ) ; <i32> [#uses=1]
ret i32 %Ret
}
int %test(bool %c, int %A) {
br bool %c, label %Taken1, label %NotTaken
Cont:
%V = phi int [0, %NotTaken],
[ sub (int cast (int* %A to int), int 1234), %Taken1]
ret int 0
NotTaken:
br label %Cont
Taken1:
%B = seteq int %A, 0
; Code got inserted here, breaking the condition code.
br bool %B, label %Cont, label %ExitError
ExitError:
ret int 12
define i32 @test(i1 %c, i32 %A) {
br i1 %c, label %Taken1, label %NotTaken
Cont: ; preds = %Taken1, %NotTaken
%V = phi i32 [ 0, %NotTaken ], [ sub (i32 ptrtoint (i32* @A to i32), i32 1234), %Taken1 ] ; <i32> [#uses=0]
ret i32 0
NotTaken: ; preds = %0
br label %Cont
Taken1: ; preds = %0
%B = icmp eq i32 %A, 0 ; <i1> [#uses=1]
br i1 %B, label %Cont, label %ExitError
ExitError: ; preds = %Taken1
ret i32 12
}

View File

@ -1,21 +1,21 @@
; PR672
; RUN: llvm-upgrade < %s | llvm-as | lli
; RUN: llvm-as < %s | lli
int %main(){
%f = cast int (int, int*, int)* %check_tail to int*
%res = tail call fastcc int %check_tail( int 10, int* %f,int 10)
ret int %res
define i32 @main() {
%f = bitcast i32 (i32, i32*, i32)* @check_tail to i32* ; <i32*> [#uses=1]
%res = tail call fastcc i32 @check_tail( i32 10, i32* %f, i32 10 ) ; <i32> [#uses=1]
ret i32 %res
}
fastcc int %check_tail(int %x, int* %f, int %g) {
%tmp1 = setgt int %x, 0
br bool %tmp1, label %if-then, label %if-else
if-then:
%fun_ptr = cast int* %f to int(int, int*, int)*
%arg1 = add int %x, -1
%res = tail call fastcc int %fun_ptr( int %arg1, int * %f, int %g)
ret int %res
if-else:
ret int %x
define fastcc i32 @check_tail(i32 %x, i32* %f, i32 %g) {
%tmp1 = icmp sgt i32 %x, 0 ; <i1> [#uses=1]
br i1 %tmp1, label %if-then, label %if-else
if-then: ; preds = %0
%fun_ptr = bitcast i32* %f to i32 (i32, i32*, i32)* ; <i32 (i32, i32*, i32)*> [#uses=1]
%arg1 = add i32 %x, -1 ; <i32> [#uses=1]
%res = tail call fastcc i32 %fun_ptr( i32 %arg1, i32* %f, i32 %g ) ; <i32> [#uses=1]
ret i32 %res
if-else: ; preds = %0
ret i32 %x
}

View File

@ -1,14 +1,12 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
%.LC0 = internal global [12 x sbyte] c"Hello World\00"
@.LC0 = internal global [12 x i8] c"Hello World\00" ; <[12 x i8]*> [#uses=1]
implementation
declare i32 @puts(i8*)
declare int %puts(sbyte*)
int %main() {
%reg210 = call int %puts( sbyte* getelementptr ([12 x sbyte]* %.LC0, long 0, long 0) )
ret int 0
define i32 @main() {
%reg210 = call i32 @puts( i8* getelementptr ([12 x i8]* @.LC0, i64 0, i64 0) ) ; <i32> [#uses=0]
ret i32 0
}

View File

@ -1,22 +1,18 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
@X = global i32 7 ; <i32*> [#uses=0]
@msg = internal global [13 x i8] c"Hello World\0A\00" ; <[13 x i8]*> [#uses=1]
%X = global int 7
%msg = internal global [13 x sbyte] c"Hello World\0A\00"
declare void @printf([13 x i8]*, ...)
implementation
declare void %printf([13 x sbyte]*,...)
void %bar() {
call void([13 x sbyte]*,...)* %printf([13 x sbyte]* %msg)
ret void
define void @bar() {
call void ([13 x i8]*, ...)* @printf( [13 x i8]* @msg )
ret void
}
int %main() {
call void %bar()
ret int 0
define i32 @main() {
call void @bar( )
ret i32 0
}

View File

@ -1,10 +1,7 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
implementation
int %main() {
ret int 0
define i32 @main() {
ret i32 0
}

View File

@ -1,12 +1,12 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
implementation
int %bar() { ret int 0 }
int %main() {
%r = call int %bar()
ret int %r
define i32 @bar() {
ret i32 0
}
define i32 @main() {
%r = call i32 @bar( ) ; <i32> [#uses=1]
ret i32 %r
}

View File

@ -1,38 +1,35 @@
; RUN: llvm-upgrade %s | llvm-as -f -o %t.bc
; RUN: llvm-as %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
int %main() {
%A = add sbyte 0, 12
%B = sub sbyte %A, 1
%C = mul sbyte %B, %B
%D = div sbyte %C, %C
%E = rem sbyte %D, %D
%F = div ubyte 5, 6
%G = rem ubyte 6, 5
%A = add short 0, 12
%B = sub short %A, 1
%C = mul short %B, %B
%D = div short %C, %C
%E = rem short %D, %D
%F = div ushort 5, 6
%G = rem uint 6, 5
%A = add int 0, 12
%B = sub int %A, 1
%C = mul int %B, %B
%D = div int %C, %C
%E = rem int %D, %D
%F = div uint 5, 6
%G1 = rem uint 6, 5
%A = add long 0, 12
%B = sub long %A, 1
%C = mul long %B, %B
%D = div long %C, %C
%E = rem long %D, %D
%F = div ulong 5, 6
%G = rem ulong 6, 5
ret int 0
define i32 @main() {
%A = add i8 0, 12 ; <i8> [#uses=1]
%B = sub i8 %A, 1 ; <i8> [#uses=2]
%C = mul i8 %B, %B ; <i8> [#uses=2]
%D = sdiv i8 %C, %C ; <i8> [#uses=2]
%E = srem i8 %D, %D ; <i8> [#uses=0]
%F = udiv i8 5, 6 ; <i8> [#uses=0]
%G = urem i8 6, 5 ; <i8> [#uses=0]
%A.upgrd.1 = add i16 0, 12 ; <i16> [#uses=1]
%B.upgrd.2 = sub i16 %A.upgrd.1, 1 ; <i16> [#uses=2]
%C.upgrd.3 = mul i16 %B.upgrd.2, %B.upgrd.2 ; <i16> [#uses=2]
%D.upgrd.4 = sdiv i16 %C.upgrd.3, %C.upgrd.3 ; <i16> [#uses=2]
%E.upgrd.5 = srem i16 %D.upgrd.4, %D.upgrd.4 ; <i16> [#uses=0]
%F.upgrd.6 = udiv i16 5, 6 ; <i16> [#uses=0]
%G.upgrd.7 = urem i32 6, 5 ; <i32> [#uses=0]
%A.upgrd.8 = add i32 0, 12 ; <i32> [#uses=1]
%B.upgrd.9 = sub i32 %A.upgrd.8, 1 ; <i32> [#uses=2]
%C.upgrd.10 = mul i32 %B.upgrd.9, %B.upgrd.9 ; <i32> [#uses=2]
%D.upgrd.11 = sdiv i32 %C.upgrd.10, %C.upgrd.10 ; <i32> [#uses=2]
%E.upgrd.12 = srem i32 %D.upgrd.11, %D.upgrd.11 ; <i32> [#uses=0]
%F.upgrd.13 = udiv i32 5, 6 ; <i32> [#uses=0]
%G1 = urem i32 6, 5 ; <i32> [#uses=0]
%A.upgrd.14 = add i64 0, 12 ; <i64> [#uses=1]
%B.upgrd.15 = sub i64 %A.upgrd.14, 1 ; <i64> [#uses=2]
%C.upgrd.16 = mul i64 %B.upgrd.15, %B.upgrd.15 ; <i64> [#uses=2]
%D.upgrd.17 = sdiv i64 %C.upgrd.16, %C.upgrd.16 ; <i64> [#uses=2]
%E.upgrd.18 = srem i64 %D.upgrd.17, %D.upgrd.17 ; <i64> [#uses=0]
%F.upgrd.19 = udiv i64 5, 6 ; <i64> [#uses=0]
%G.upgrd.20 = urem i64 6, 5 ; <i64> [#uses=0]
ret i32 0
}

View File

@ -1,12 +1,13 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
; test unconditional branch
int %main() {
define i32 @main() {
br label %Test
Test:
%X = seteq int 0, 4
br bool %X, label %Test, label %Label
Label:
ret int 0
Test: ; preds = %Test, %0
%X = icmp eq i32 0, 4 ; <i1> [#uses=1]
br i1 %X, label %Test, label %Label
Label: ; preds = %Test
ret i32 0
}

View File

@ -1,22 +1,22 @@
; RUN: llvm-upgrade %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
declare void @exit(i32)
declare void %exit(int)
int %test(sbyte %C, short %S) {
%X = cast short %S to ubyte
%Y = cast ubyte %X to int
ret int %Y
define i32 @test(i8 %C, i16 %S) {
%X = trunc i16 %S to i8 ; <i8> [#uses=1]
%Y = zext i8 %X to i32 ; <i32> [#uses=1]
ret i32 %Y
}
void %FP(void(int) * %F) {
%X = call int %test(sbyte 123, short 1024)
call void %F(int %X)
define void @FP(void (i32)* %F) {
%X = call i32 @test( i8 123, i16 1024 ) ; <i32> [#uses=1]
call void %F( i32 %X )
ret void
}
int %main() {
call void %FP(void(int)* %exit)
ret int 1
define i32 @main() {
call void @FP( void (i32)* @exit )
ret i32 1
}

View File

@ -1,136 +1,110 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
int %foo() {
ret int 0
define i32 @foo() {
ret i32 0
}
int %main() {
; cast bool to ...
cast bool true to bool
cast bool true to ubyte
cast bool true to sbyte
cast bool true to short
cast bool true to ushort
cast bool true to int
cast bool true to uint
cast bool true to long
cast bool true to ulong
cast bool true to float
cast bool true to double
; cast sbyte to ...
cast sbyte 0 to bool
cast sbyte 1 to bool
cast sbyte 0 to sbyte
cast sbyte -1 to ubyte
cast sbyte 4 to short
cast sbyte 4 to ushort
cast sbyte 4 to long
cast sbyte 4 to ulong
cast sbyte 4 to float
cast sbyte 4 to double
; cast ubyte to ...
cast ubyte 0 to bool
cast ubyte 1 to bool
cast ubyte 0 to sbyte
cast ubyte 1 to ubyte
cast ubyte 4 to short
cast ubyte 4 to ushort
cast ubyte 4 to long
cast ubyte 4 to ulong
cast ubyte 0 to float
cast ubyte 0 to double
; cast short to ...
cast short 1 to bool
cast short -1 to sbyte
cast short 255 to ubyte
cast short 0 to short
cast short 0 to ushort
cast short 0 to long
cast short 0 to ulong
cast short 0 to float
cast short 0 to double
; cast ushort to ...
cast ushort 1 to bool
cast ushort 1 to sbyte
cast ushort 255 to ubyte
cast ushort 0 to short
cast ushort 0 to ushort
cast ushort 0 to long
cast ushort 0 to ulong
cast ushort 0 to float
cast ushort 0 to double
; cast int to ...
cast int 6 to bool
cast int -6 to sbyte
cast int 6 to ubyte
cast int 6 to short
cast int 0 to int
cast int 0 to long
cast int 0 to ulong
cast int 0 to float
cast int 0 to double
; cast uint to ...
cast uint 6 to bool
cast uint 7 to sbyte
cast uint 8 to ubyte
cast uint 9 to short
cast uint 10 to int
cast uint 0 to long
cast uint 0 to ulong
cast uint 0 to float
cast uint 0 to double
; cast long to ...
cast long 0 to bool
cast long 0 to sbyte
cast long 0 to ubyte
cast long 0 to short
cast long 0 to ushort
cast long 0 to int
cast long 0 to uint
cast long 0 to long
cast long 0 to ulong
cast long 0 to float
cast long 0 to double
; cast ulong to ...
cast ulong 1 to bool
cast ulong 1 to sbyte
cast ulong 1 to ubyte
cast ulong 1 to short
cast ulong 1 to ushort
cast ulong 1 to int
cast ulong 1 to uint
cast ulong 1 to long
cast ulong 1 to ulong
cast ulong 1 to float
cast ulong 0 to double
; cast float to ...
;cast float 0.0 to bool
cast float 0.0 to float
cast float 0.0 to double
; cast double to ...
;cast double 0.0 to bool
cast double 0.0 to sbyte
cast double 0.0 to ubyte
cast double 0.0 to short
cast double 0.0 to ushort
cast double 0.0 to int
cast double 0.0 to uint
cast double 0.0 to long
;cast double 0.0 to ulong
cast double 0.0 to float
cast double 0.0 to double
ret int 0
define i32 @main() {
icmp ne i1 true, false ; <i1>:1 [#uses=0]
zext i1 true to i8 ; <i8>:2 [#uses=0]
zext i1 true to i8 ; <i8>:3 [#uses=0]
zext i1 true to i16 ; <i16>:4 [#uses=0]
zext i1 true to i16 ; <i16>:5 [#uses=0]
zext i1 true to i32 ; <i32>:6 [#uses=0]
zext i1 true to i32 ; <i32>:7 [#uses=0]
zext i1 true to i64 ; <i64>:8 [#uses=0]
zext i1 true to i64 ; <i64>:9 [#uses=0]
uitofp i1 true to float ; <float>:10 [#uses=0]
uitofp i1 true to double ; <double>:11 [#uses=0]
icmp ne i8 0, 0 ; <i1>:12 [#uses=0]
icmp ne i8 1, 0 ; <i1>:13 [#uses=0]
bitcast i8 0 to i8 ; <i8>:14 [#uses=0]
bitcast i8 -1 to i8 ; <i8>:15 [#uses=0]
sext i8 4 to i16 ; <i16>:16 [#uses=0]
sext i8 4 to i16 ; <i16>:17 [#uses=0]
sext i8 4 to i64 ; <i64>:18 [#uses=0]
sext i8 4 to i64 ; <i64>:19 [#uses=0]
sitofp i8 4 to float ; <float>:20 [#uses=0]
sitofp i8 4 to double ; <double>:21 [#uses=0]
icmp ne i8 0, 0 ; <i1>:22 [#uses=0]
icmp ne i8 1, 0 ; <i1>:23 [#uses=0]
bitcast i8 0 to i8 ; <i8>:24 [#uses=0]
bitcast i8 1 to i8 ; <i8>:25 [#uses=0]
zext i8 4 to i16 ; <i16>:26 [#uses=0]
zext i8 4 to i16 ; <i16>:27 [#uses=0]
zext i8 4 to i64 ; <i64>:28 [#uses=0]
zext i8 4 to i64 ; <i64>:29 [#uses=0]
uitofp i8 0 to float ; <float>:30 [#uses=0]
uitofp i8 0 to double ; <double>:31 [#uses=0]
icmp ne i16 1, 0 ; <i1>:32 [#uses=0]
trunc i16 -1 to i8 ; <i8>:33 [#uses=0]
trunc i16 255 to i8 ; <i8>:34 [#uses=0]
bitcast i16 0 to i16 ; <i16>:35 [#uses=0]
bitcast i16 0 to i16 ; <i16>:36 [#uses=0]
sext i16 0 to i64 ; <i64>:37 [#uses=0]
sext i16 0 to i64 ; <i64>:38 [#uses=0]
sitofp i16 0 to float ; <float>:39 [#uses=0]
sitofp i16 0 to double ; <double>:40 [#uses=0]
icmp ne i16 1, 0 ; <i1>:41 [#uses=0]
trunc i16 1 to i8 ; <i8>:42 [#uses=0]
trunc i16 255 to i8 ; <i8>:43 [#uses=0]
bitcast i16 0 to i16 ; <i16>:44 [#uses=0]
bitcast i16 0 to i16 ; <i16>:45 [#uses=0]
zext i16 0 to i64 ; <i64>:46 [#uses=0]
zext i16 0 to i64 ; <i64>:47 [#uses=0]
uitofp i16 0 to float ; <float>:48 [#uses=0]
uitofp i16 0 to double ; <double>:49 [#uses=0]
icmp ne i32 6, 0 ; <i1>:50 [#uses=0]
trunc i32 -6 to i8 ; <i8>:51 [#uses=0]
trunc i32 6 to i8 ; <i8>:52 [#uses=0]
trunc i32 6 to i16 ; <i16>:53 [#uses=0]
bitcast i32 0 to i32 ; <i32>:54 [#uses=0]
sext i32 0 to i64 ; <i64>:55 [#uses=0]
sext i32 0 to i64 ; <i64>:56 [#uses=0]
sitofp i32 0 to float ; <float>:57 [#uses=0]
sitofp i32 0 to double ; <double>:58 [#uses=0]
icmp ne i32 6, 0 ; <i1>:59 [#uses=0]
trunc i32 7 to i8 ; <i8>:60 [#uses=0]
trunc i32 8 to i8 ; <i8>:61 [#uses=0]
trunc i32 9 to i16 ; <i16>:62 [#uses=0]
bitcast i32 10 to i32 ; <i32>:63 [#uses=0]
zext i32 0 to i64 ; <i64>:64 [#uses=0]
zext i32 0 to i64 ; <i64>:65 [#uses=0]
uitofp i32 0 to float ; <float>:66 [#uses=0]
uitofp i32 0 to double ; <double>:67 [#uses=0]
icmp ne i64 0, 0 ; <i1>:68 [#uses=0]
trunc i64 0 to i8 ; <i8>:69 [#uses=0]
trunc i64 0 to i8 ; <i8>:70 [#uses=0]
trunc i64 0 to i16 ; <i16>:71 [#uses=0]
trunc i64 0 to i16 ; <i16>:72 [#uses=0]
trunc i64 0 to i32 ; <i32>:73 [#uses=0]
trunc i64 0 to i32 ; <i32>:74 [#uses=0]
bitcast i64 0 to i64 ; <i64>:75 [#uses=0]
bitcast i64 0 to i64 ; <i64>:76 [#uses=0]
sitofp i64 0 to float ; <float>:77 [#uses=0]
sitofp i64 0 to double ; <double>:78 [#uses=0]
icmp ne i64 1, 0 ; <i1>:79 [#uses=0]
trunc i64 1 to i8 ; <i8>:80 [#uses=0]
trunc i64 1 to i8 ; <i8>:81 [#uses=0]
trunc i64 1 to i16 ; <i16>:82 [#uses=0]
trunc i64 1 to i16 ; <i16>:83 [#uses=0]
trunc i64 1 to i32 ; <i32>:84 [#uses=0]
trunc i64 1 to i32 ; <i32>:85 [#uses=0]
bitcast i64 1 to i64 ; <i64>:86 [#uses=0]
bitcast i64 1 to i64 ; <i64>:87 [#uses=0]
uitofp i64 1 to float ; <float>:88 [#uses=0]
uitofp i64 0 to double ; <double>:89 [#uses=0]
bitcast float 0.000000e+00 to float ; <float>:90 [#uses=0]
fpext float 0.000000e+00 to double ; <double>:91 [#uses=0]
fptosi double 0.000000e+00 to i8 ; <i8>:92 [#uses=0]
fptoui double 0.000000e+00 to i8 ; <i8>:93 [#uses=0]
fptosi double 0.000000e+00 to i16 ; <i16>:94 [#uses=0]
fptoui double 0.000000e+00 to i16 ; <i16>:95 [#uses=0]
fptosi double 0.000000e+00 to i32 ; <i32>:96 [#uses=0]
fptoui double 0.000000e+00 to i32 ; <i32>:97 [#uses=0]
fptosi double 0.000000e+00 to i64 ; <i64>:98 [#uses=0]
fptrunc double 0.000000e+00 to float ; <float>:99 [#uses=0]
bitcast double 0.000000e+00 to double ; <double>:100 [#uses=0]
ret i32 0
}

View File

@ -1,14 +1,13 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
; This tests to make sure that we can evaluate weird constant expressions
%A = global int 5
%B = global int 6
implementation
@A = global i32 5 ; <i32*> [#uses=1]
@B = global i32 6 ; <i32*> [#uses=1]
int %main() {
%A = or bool false, setlt (int* %A, int* %B) ; Which is lower in memory?
ret int 0
define i32 @main() {
%A = or i1 false, icmp slt (i32* @A, i32* @B) ; <i1> [#uses=0]
ret i32 0
}

View File

@ -1,24 +1,24 @@
; RUN: llvm-upgrade %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
double %test(double* %DP, double %Arg) {
%D = load double* %DP
%V = add double %D, 1.0
%W = sub double %V, %V
%X = mul double %W, %W
%Y = div double %X, %X
%Z = rem double %Y, %Y
%Z1 = div double %Z, %W
%Q = add double %Z, %Arg
%R = cast double %Q to double
define double @test(double* %DP, double %Arg) {
%D = load double* %DP ; <double> [#uses=1]
%V = add double %D, 1.000000e+00 ; <double> [#uses=2]
%W = sub double %V, %V ; <double> [#uses=3]
%X = mul double %W, %W ; <double> [#uses=2]
%Y = fdiv double %X, %X ; <double> [#uses=2]
%Z = frem double %Y, %Y ; <double> [#uses=3]
%Z1 = fdiv double %Z, %W ; <double> [#uses=0]
%Q = add double %Z, %Arg ; <double> [#uses=1]
%R = bitcast double %Q to double ; <double> [#uses=1]
store double %R, double* %DP
ret double %Z
}
int %main() {
%X = alloca double
store double 0.0, double* %X
call double %test(double* %X, double 2.0)
ret int 0
define i32 @main() {
%X = alloca double ; <double*> [#uses=2]
store double 0.000000e+00, double* %X
call double @test( double* %X, double 2.000000e+00 ) ; <double>:1 [#uses=0]
ret i32 0
}

View File

@ -1,37 +1,32 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
void %test(sbyte* %P, short* %P, int* %P, long* %P) {
%V = load sbyte* %P
store sbyte %V, sbyte* %P
%V = load short* %P
store short %V, short* %P
%V = load int* %P
store int %V, int* %P
%V = load long* %P
store long %V, long* %P
define void @test(i8* %P, i16* %P.upgrd.1, i32* %P.upgrd.2, i64* %P.upgrd.3) {
%V = load i8* %P ; <i8> [#uses=1]
store i8 %V, i8* %P
%V.upgrd.4 = load i16* %P.upgrd.1 ; <i16> [#uses=1]
store i16 %V.upgrd.4, i16* %P.upgrd.1
%V.upgrd.5 = load i32* %P.upgrd.2 ; <i32> [#uses=1]
store i32 %V.upgrd.5, i32* %P.upgrd.2
%V.upgrd.6 = load i64* %P.upgrd.3 ; <i64> [#uses=1]
store i64 %V.upgrd.6, i64* %P.upgrd.3
ret void
}
uint %varalloca(uint %Size) {
%X = alloca uint, uint %Size ;; Variable sized alloca
store uint %Size, uint* %X
%Y = load uint* %X
ret uint %Y
define i32 @varalloca(i32 %Size) {
;; Variable sized alloca
%X = alloca i32, i32 %Size ; <i32*> [#uses=2]
store i32 %Size, i32* %X
%Y = load i32* %X ; <i32> [#uses=1]
ret i32 %Y
}
int %main() {
%A = alloca sbyte
%B = alloca short
%C = alloca int
%D = alloca long
call void %test(sbyte* %A, short* %B, int* %C, long* %D)
call uint %varalloca(uint 7)
ret int 0
define i32 @main() {
%A = alloca i8 ; <i8*> [#uses=1]
%B = alloca i16 ; <i16*> [#uses=1]
%C = alloca i32 ; <i32*> [#uses=1]
%D = alloca i64 ; <i64*> [#uses=1]
call void @test( i8* %A, i16* %B, i32* %C, i64* %D )
call i32 @varalloca( i32 7 ) ; <i32>:1 [#uses=0]
ret i32 0
}

View File

@ -1,23 +1,19 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
int %main() {
%A = and sbyte 4, 8
%B = or sbyte %A, 7
%C = xor sbyte %B, %A
%A = and short 4, 8
%B = or short %A, 7
%C = xor short %B, %A
%A = and int 4, 8
%B = or int %A, 7
%C = xor int %B, %A
%A = and long 4, 8
%B = or long %A, 7
%C = xor long %B, %A
ret int 0
define i32 @main() {
%A = and i8 4, 8 ; <i8> [#uses=2]
%B = or i8 %A, 7 ; <i8> [#uses=1]
%C = xor i8 %B, %A ; <i8> [#uses=0]
%A.upgrd.1 = and i16 4, 8 ; <i16> [#uses=2]
%B.upgrd.2 = or i16 %A.upgrd.1, 7 ; <i16> [#uses=1]
%C.upgrd.3 = xor i16 %B.upgrd.2, %A.upgrd.1 ; <i16> [#uses=0]
%A.upgrd.4 = and i32 4, 8 ; <i32> [#uses=2]
%B.upgrd.5 = or i32 %A.upgrd.4, 7 ; <i32> [#uses=1]
%C.upgrd.6 = xor i32 %B.upgrd.5, %A.upgrd.4 ; <i32> [#uses=0]
%A.upgrd.7 = and i64 4, 8 ; <i64> [#uses=2]
%B.upgrd.8 = or i64 %A.upgrd.7, 7 ; <i64> [#uses=1]
%C.upgrd.9 = xor i64 %B.upgrd.8, %A.upgrd.7 ; <i64> [#uses=0]
ret i32 0
}

View File

@ -1,13 +1,15 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
int %main() {
define i32 @main() {
; <label>:0
br label %Loop
Loop:
%I = phi int [0, %0], [%i2, %Loop]
%i2 = add int %I, 1
%C = seteq int %i2, 10
br bool %C, label %Out, label %Loop
Out:
ret int 0
Loop: ; preds = %Loop, %0
%I = phi i32 [ 0, %0 ], [ %i2, %Loop ] ; <i32> [#uses=1]
%i2 = add i32 %I, 1 ; <i32> [#uses=2]
%C = icmp eq i32 %i2, 10 ; <i1> [#uses=1]
br i1 %C, label %Out, label %Loop
Out: ; preds = %Loop
ret i32 0
}

View File

@ -1,14 +1,14 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
int %main() {
%X = malloc int ; constant size
%Y = malloc int, uint 100 ; constant size
%u = add uint 1, 2
%Z = malloc int, uint %u ; variable size
free int* %X
free int* %Y
free int* %Z
ret int 0
define i32 @main() {
%X = malloc i32 ; <i32*> [#uses=1]
%Y = malloc i32, i32 100 ; <i32*> [#uses=1]
%u = add i32 1, 2 ; <i32> [#uses=1]
%Z = malloc i32, i32 %u ; <i32*> [#uses=1]
free i32* %X
free i32* %Y
free i32* %Z
ret i32 0
}

View File

@ -1,32 +1,35 @@
; RUN: llvm-upgrade %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
; test phi node
@Y = global i32 6 ; <i32*> [#uses=1]
%Y = global int 6
void %blah(int *%X) {
define void @blah(i32* %X) {
; <label>:0
br label %T
T:
phi int* [%X, %0], [%Y, %Dead]
T: ; preds = %Dead, %0
phi i32* [ %X, %0 ], [ @Y, %Dead ] ; <i32*>:1 [#uses=0]
ret void
Dead:
Dead: ; No predecessors!
br label %T
}
int %test(bool %C) {
br bool %C, label %T, label %T
T:
%X = phi int [123, %0], [123, %0]
ret int %X
define i32 @test(i1 %C) {
; <label>:0
br i1 %C, label %T, label %T
T: ; preds = %0, %0
%X = phi i32 [ 123, %0 ], [ 123, %0 ] ; <i32> [#uses=1]
ret i32 %X
}
int %main() {
define i32 @main() {
; <label>:0
br label %Test
Test:
%X = phi int [0, %0], [%Y, %Dead]
ret int %X
Dead:
%Y = shr int 12, ubyte 4
Test: ; preds = %Dead, %0
%X = phi i32 [ 0, %0 ], [ %Y, %Dead ] ; <i32> [#uses=1]
ret i32 %X
Dead: ; No predecessors!
%Y = ashr i32 12, 4 ; <i32> [#uses=1]
br label %Test
}

View File

@ -1,16 +1,47 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
; test return instructions
define void @test1() {
ret void
}
void %test1() { ret void }
sbyte %test2() { ret sbyte 1 }
ubyte %test3() { ret ubyte 1 }
short %test4() { ret short -1 }
ushort %test5() { ret ushort 65535 }
int %main() { ret int 0 }
uint %test6() { ret uint 4 }
long %test7() { ret long 0 }
ulong %test8() { ret ulong 0 }
float %test9() { ret float 1.0 }
double %test10() { ret double 2.0 }
define i8 @test2() {
ret i8 1
}
define i8 @test3() {
ret i8 1
}
define i16 @test4() {
ret i16 -1
}
define i16 @test5() {
ret i16 -1
}
define i32 @main() {
ret i32 0
}
define i32 @test6() {
ret i32 4
}
define i64 @test7() {
ret i64 0
}
define i64 @test8() {
ret i64 0
}
define float @test9() {
ret float 1.000000e+00
}
define double @test10() {
ret double 2.000000e+00
}

View File

@ -1,23 +1,25 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
int %main() {
%double1 = add double 0.0, 0.0
%double2 = add double 0.0, 0.0
%float1 = add float 0.0, 0.0
%float2 = add float 0.0, 0.0
%test49 = seteq float %float1, %float2
%test50 = setge float %float1, %float2
%test51 = setgt float %float1, %float2
%test52 = setle float %float1, %float2
%test53 = setlt float %float1, %float2
%test54 = setne float %float1, %float2
%test55 = seteq double %double1, %double2
%test56 = setge double %double1, %double2
%test57 = setgt double %double1, %double2
%test58 = setle double %double1, %double2
%test59 = setlt double %double1, %double2
%test60 = setne double %double1, %double2
ret int 0
define i32 @main() {
%double1 = add double 0.000000e+00, 0.000000e+00 ; <double> [#uses=6]
%double2 = add double 0.000000e+00, 0.000000e+00 ; <double> [#uses=6]
%float1 = add float 0.000000e+00, 0.000000e+00 ; <float> [#uses=6]
%float2 = add float 0.000000e+00, 0.000000e+00 ; <float> [#uses=6]
%test49 = fcmp oeq float %float1, %float2 ; <i1> [#uses=0]
%test50 = fcmp oge float %float1, %float2 ; <i1> [#uses=0]
%test51 = fcmp ogt float %float1, %float2 ; <i1> [#uses=0]
%test52 = fcmp ole float %float1, %float2 ; <i1> [#uses=0]
%test53 = fcmp olt float %float1, %float2 ; <i1> [#uses=0]
%test54 = fcmp une float %float1, %float2 ; <i1> [#uses=0]
%test55 = fcmp oeq double %double1, %double2 ; <i1> [#uses=0]
%test56 = fcmp oge double %double1, %double2 ; <i1> [#uses=0]
%test57 = fcmp ogt double %double1, %double2 ; <i1> [#uses=0]
%test58 = fcmp ole double %double1, %double2 ; <i1> [#uses=0]
%test59 = fcmp olt double %double1, %double2 ; <i1> [#uses=0]
%test60 = fcmp une double %double1, %double2 ; <i1> [#uses=0]
ret i32 0
}

View File

@ -1,71 +1,70 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
int %main() {
%int1 = add int 0, 0
%int2 = add int 0, 0
%long1 = add long 0, 0
%long2 = add long 0, 0
%sbyte1 = add sbyte 0, 0
%sbyte2 = add sbyte 0, 0
%short1 = add short 0, 0
%short2 = add short 0, 0
%ubyte1 = add ubyte 0, 0
%ubyte2 = add ubyte 0, 0
%uint1 = add uint 0, 0
%uint2 = add uint 0, 0
%ulong1 = add ulong 0, 0
%ulong2 = add ulong 0, 0
%ushort1 = add ushort 0, 0
%ushort2 = add ushort 0, 0
%test1 = seteq ubyte %ubyte1, %ubyte2
%test2 = setge ubyte %ubyte1, %ubyte2
%test3 = setgt ubyte %ubyte1, %ubyte2
%test4 = setle ubyte %ubyte1, %ubyte2
%test5 = setlt ubyte %ubyte1, %ubyte2
%test6 = setne ubyte %ubyte1, %ubyte2
%test7 = seteq ushort %ushort1, %ushort2
%test8 = setge ushort %ushort1, %ushort2
%test9 = setgt ushort %ushort1, %ushort2
%test10 = setle ushort %ushort1, %ushort2
%test11 = setlt ushort %ushort1, %ushort2
%test12 = setne ushort %ushort1, %ushort2
%test13 = seteq uint %uint1, %uint2
%test14 = setge uint %uint1, %uint2
%test15 = setgt uint %uint1, %uint2
%test16 = setle uint %uint1, %uint2
%test17 = setlt uint %uint1, %uint2
%test18 = setne uint %uint1, %uint2
%test19 = seteq ulong %ulong1, %ulong2
%test20 = setge ulong %ulong1, %ulong2
%test21 = setgt ulong %ulong1, %ulong2
%test22 = setle ulong %ulong1, %ulong2
%test23 = setlt ulong %ulong1, %ulong2
%test24 = setne ulong %ulong1, %ulong2
%test25 = seteq sbyte %sbyte1, %sbyte2
%test26 = setge sbyte %sbyte1, %sbyte2
%test27 = setgt sbyte %sbyte1, %sbyte2
%test28 = setle sbyte %sbyte1, %sbyte2
%test29 = setlt sbyte %sbyte1, %sbyte2
%test30 = setne sbyte %sbyte1, %sbyte2
%test31 = seteq short %short1, %short2
%test32 = setge short %short1, %short2
%test33 = setgt short %short1, %short2
%test34 = setle short %short1, %short2
%test35 = setlt short %short1, %short2
%test36 = setne short %short1, %short2
%test37 = seteq int %int1, %int2
%test38 = setge int %int1, %int2
%test39 = setgt int %int1, %int2
%test40 = setle int %int1, %int2
%test41 = setlt int %int1, %int2
%test42 = setne int %int1, %int2
%test43 = seteq long %long1, %long2
%test44 = setge long %long1, %long2
%test45 = setgt long %long1, %long2
%test46 = setle long %long1, %long2
%test47 = setlt long %long1, %long2
%test48 = setne long %long1, %long2
ret int 0
define i32 @main() {
%int1 = add i32 0, 0 ; <i32> [#uses=6]
%int2 = add i32 0, 0 ; <i32> [#uses=6]
%long1 = add i64 0, 0 ; <i64> [#uses=6]
%long2 = add i64 0, 0 ; <i64> [#uses=6]
%sbyte1 = add i8 0, 0 ; <i8> [#uses=6]
%sbyte2 = add i8 0, 0 ; <i8> [#uses=6]
%short1 = add i16 0, 0 ; <i16> [#uses=6]
%short2 = add i16 0, 0 ; <i16> [#uses=6]
%ubyte1 = add i8 0, 0 ; <i8> [#uses=6]
%ubyte2 = add i8 0, 0 ; <i8> [#uses=6]
%uint1 = add i32 0, 0 ; <i32> [#uses=6]
%uint2 = add i32 0, 0 ; <i32> [#uses=6]
%ulong1 = add i64 0, 0 ; <i64> [#uses=6]
%ulong2 = add i64 0, 0 ; <i64> [#uses=6]
%ushort1 = add i16 0, 0 ; <i16> [#uses=6]
%ushort2 = add i16 0, 0 ; <i16> [#uses=6]
%test1 = icmp eq i8 %ubyte1, %ubyte2 ; <i1> [#uses=0]
%test2 = icmp uge i8 %ubyte1, %ubyte2 ; <i1> [#uses=0]
%test3 = icmp ugt i8 %ubyte1, %ubyte2 ; <i1> [#uses=0]
%test4 = icmp ule i8 %ubyte1, %ubyte2 ; <i1> [#uses=0]
%test5 = icmp ult i8 %ubyte1, %ubyte2 ; <i1> [#uses=0]
%test6 = icmp ne i8 %ubyte1, %ubyte2 ; <i1> [#uses=0]
%test7 = icmp eq i16 %ushort1, %ushort2 ; <i1> [#uses=0]
%test8 = icmp uge i16 %ushort1, %ushort2 ; <i1> [#uses=0]
%test9 = icmp ugt i16 %ushort1, %ushort2 ; <i1> [#uses=0]
%test10 = icmp ule i16 %ushort1, %ushort2 ; <i1> [#uses=0]
%test11 = icmp ult i16 %ushort1, %ushort2 ; <i1> [#uses=0]
%test12 = icmp ne i16 %ushort1, %ushort2 ; <i1> [#uses=0]
%test13 = icmp eq i32 %uint1, %uint2 ; <i1> [#uses=0]
%test14 = icmp uge i32 %uint1, %uint2 ; <i1> [#uses=0]
%test15 = icmp ugt i32 %uint1, %uint2 ; <i1> [#uses=0]
%test16 = icmp ule i32 %uint1, %uint2 ; <i1> [#uses=0]
%test17 = icmp ult i32 %uint1, %uint2 ; <i1> [#uses=0]
%test18 = icmp ne i32 %uint1, %uint2 ; <i1> [#uses=0]
%test19 = icmp eq i64 %ulong1, %ulong2 ; <i1> [#uses=0]
%test20 = icmp uge i64 %ulong1, %ulong2 ; <i1> [#uses=0]
%test21 = icmp ugt i64 %ulong1, %ulong2 ; <i1> [#uses=0]
%test22 = icmp ule i64 %ulong1, %ulong2 ; <i1> [#uses=0]
%test23 = icmp ult i64 %ulong1, %ulong2 ; <i1> [#uses=0]
%test24 = icmp ne i64 %ulong1, %ulong2 ; <i1> [#uses=0]
%test25 = icmp eq i8 %sbyte1, %sbyte2 ; <i1> [#uses=0]
%test26 = icmp sge i8 %sbyte1, %sbyte2 ; <i1> [#uses=0]
%test27 = icmp sgt i8 %sbyte1, %sbyte2 ; <i1> [#uses=0]
%test28 = icmp sle i8 %sbyte1, %sbyte2 ; <i1> [#uses=0]
%test29 = icmp slt i8 %sbyte1, %sbyte2 ; <i1> [#uses=0]
%test30 = icmp ne i8 %sbyte1, %sbyte2 ; <i1> [#uses=0]
%test31 = icmp eq i16 %short1, %short2 ; <i1> [#uses=0]
%test32 = icmp sge i16 %short1, %short2 ; <i1> [#uses=0]
%test33 = icmp sgt i16 %short1, %short2 ; <i1> [#uses=0]
%test34 = icmp sle i16 %short1, %short2 ; <i1> [#uses=0]
%test35 = icmp slt i16 %short1, %short2 ; <i1> [#uses=0]
%test36 = icmp ne i16 %short1, %short2 ; <i1> [#uses=0]
%test37 = icmp eq i32 %int1, %int2 ; <i1> [#uses=0]
%test38 = icmp sge i32 %int1, %int2 ; <i1> [#uses=0]
%test39 = icmp sgt i32 %int1, %int2 ; <i1> [#uses=0]
%test40 = icmp sle i32 %int1, %int2 ; <i1> [#uses=0]
%test41 = icmp slt i32 %int1, %int2 ; <i1> [#uses=0]
%test42 = icmp ne i32 %int1, %int2 ; <i1> [#uses=0]
%test43 = icmp eq i64 %long1, %long2 ; <i1> [#uses=0]
%test44 = icmp sge i64 %long1, %long2 ; <i1> [#uses=0]
%test45 = icmp sgt i64 %long1, %long2 ; <i1> [#uses=0]
%test46 = icmp sle i64 %long1, %long2 ; <i1> [#uses=0]
%test47 = icmp slt i64 %long1, %long2 ; <i1> [#uses=0]
%test48 = icmp ne i64 %long1, %long2 ; <i1> [#uses=0]
ret i32 0
}

View File

@ -1,40 +1,33 @@
; RUN: llvm-upgrade %s | llvm-as -f -o %t.bc
; RUN: llvm-as < %s -f -o %t.bc
; RUN: lli %t.bc > /dev/null
; test shifts
int %main() {
%shamt = add ubyte 0, 1
; Left shifts...
%t1.s = shl int 1, ubyte %shamt
%t2.s = shl int 1, ubyte 4
%t1 = shl uint 1, ubyte %shamt
%t2 = shl uint 1, ubyte 5
;%t1 = shl long 1, ubyte %shamt
%t2.s = shl long 1, ubyte 4
;%t1 = shl ulong 1, ubyte %shamt
%t2 = shl ulong 1, ubyte 5
; Right shifts...
%tr1.s = shr int 1, ubyte %shamt
%tr2.s = shr int 1, ubyte 4
%tr1 = shr uint 1, ubyte %shamt
%tr2 = shr uint 1, ubyte 5
;%tr1 = shr long 1, ubyte %shamt
%tr1.l = shr long 1, ubyte 4
%tr2.l = shr long 1, ubyte %shamt
%tr3.l = shl long 1, ubyte 4
%tr4.l = shl long 1, ubyte %shamt
;%t1 = shr ulong 1, ubyte %shamt
%tr1.u = shr ulong 1, ubyte 5
%tr2.u = shr ulong 1, ubyte %shamt
%tr3.u = shl ulong 1, ubyte 5
%tr4.u = shl ulong 1, ubyte %shamt
ret int 0
define i32 @main() {
%shamt = add i8 0, 1 ; <i8> [#uses=8]
%shift.upgrd.1 = zext i8 %shamt to i32 ; <i32> [#uses=1]
%t1.s = shl i32 1, %shift.upgrd.1 ; <i32> [#uses=0]
%t2.s = shl i32 1, 4 ; <i32> [#uses=0]
%shift.upgrd.2 = zext i8 %shamt to i32 ; <i32> [#uses=1]
%t1 = shl i32 1, %shift.upgrd.2 ; <i32> [#uses=0]
%t2 = shl i32 1, 5 ; <i32> [#uses=0]
%t2.s.upgrd.3 = shl i64 1, 4 ; <i64> [#uses=0]
%t2.upgrd.4 = shl i64 1, 5 ; <i64> [#uses=0]
%shift.upgrd.5 = zext i8 %shamt to i32 ; <i32> [#uses=1]
%tr1.s = ashr i32 1, %shift.upgrd.5 ; <i32> [#uses=0]
%tr2.s = ashr i32 1, 4 ; <i32> [#uses=0]
%shift.upgrd.6 = zext i8 %shamt to i32 ; <i32> [#uses=1]
%tr1 = lshr i32 1, %shift.upgrd.6 ; <i32> [#uses=0]
%tr2 = lshr i32 1, 5 ; <i32> [#uses=0]
%tr1.l = ashr i64 1, 4 ; <i64> [#uses=0]
%shift.upgrd.7 = zext i8 %shamt to i64 ; <i64> [#uses=1]
%tr2.l = ashr i64 1, %shift.upgrd.7 ; <i64> [#uses=0]
%tr3.l = shl i64 1, 4 ; <i64> [#uses=0]
%shift.upgrd.8 = zext i8 %shamt to i64 ; <i64> [#uses=1]
%tr4.l = shl i64 1, %shift.upgrd.8 ; <i64> [#uses=0]
%tr1.u = lshr i64 1, 5 ; <i64> [#uses=0]
%shift.upgrd.9 = zext i8 %shamt to i64 ; <i64> [#uses=1]
%tr2.u = lshr i64 1, %shift.upgrd.9 ; <i64> [#uses=0]
%tr3.u = shl i64 1, 5 ; <i64> [#uses=0]
%shift.upgrd.10 = zext i8 %shamt to i64 ; <i64> [#uses=1]
%tr4.u = shl i64 1, %shift.upgrd.10 ; <i64> [#uses=0]
ret i32 0
}

View File

@ -4,19 +4,16 @@
; little symbol table. This is causing llvm-link to die, at no fault of its
; own.
; RUN: llvm-upgrade %s | llvm-as > %t.out2.bc
; RUN: llvm-as < %s > %t.out2.bc
; RUN: echo "%T1 = type opaque @GVar = external global %T1*" | llvm-as > %t.out1.bc
; RUN: llvm-link %t.out1.bc %t.out2.bc
%T1 = type opaque
%T2 = type int
%T1 = type opaque
%T2 = type i32
@GVar = global i32* null ; <i32**> [#uses=0]
%GVar = global %T2 * null
implementation
void %foo(%T2 * %X) {
%X = cast %T2* %X to %T1 *
define void @foo(i32* %X) {
%X.upgrd.1 = bitcast i32* %X to %T1* ; <%T1*> [#uses=0]
ret void
}

View File

@ -1,7 +1,7 @@
; RUN: llvm-upgrade < %s | llvm-as > %t.out2.bc
; RUN: echo "%me = global int* null" | llvm-upgrade | llvm-as > %t.out1.bc
; RUN: llvm-as < %s > %t.out2.bc
; RUN: echo "@me = global i32* null" | llvm-as > %t.out1.bc
; RUN: llvm-link %t.out1.bc %t.out2.bc -o /dev/null -f
%me = weak global int * null
@me = weak global i32* null ; <i32**> [#uses=0]

View File

@ -1,45 +1,35 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t1.bc
; RUN: llvm-upgrade < %p/2004-05-07-TypeResolution2.ll | \
; RUN: llvm-as -o %t2.bc -f
; RUN: llvm-as < %s -f -o %t1.bc
; RUN: llvm-as < %p/2004-05-07-TypeResolution2.ll -o %t2.bc -f
; RUN: llvm-link -f -o %t3.bc %t1.bc %t2.bc
target endian = little
target pointersize = 32
%myint = type opaque
target datalayout = "e-p:32:32"
%myint = type opaque
%struct1 = type { i32, void (%struct2*)*, %myint*, i32 (i32*)* }
%struct2 = type { %struct1 }
@driver1 = global %struct1 zeroinitializer ; <%struct1*> [#uses=1]
@m1 = external global [1 x i8]* ; <[1 x i8]**> [#uses=0]
@str1 = constant [1 x i8] zeroinitializer ; <[1 x i8]*> [#uses=0]
@str2 = constant [2 x i8] zeroinitializer ; <[2 x i8]*> [#uses=0]
@str3 = constant [3 x i8] zeroinitializer ; <[3 x i8]*> [#uses=0]
@str4 = constant [4 x i8] zeroinitializer ; <[4 x i8]*> [#uses=0]
@str5 = constant [5 x i8] zeroinitializer ; <[5 x i8]*> [#uses=0]
@str6 = constant [6 x i8] zeroinitializer ; <[6 x i8]*> [#uses=0]
@str7 = constant [7 x i8] zeroinitializer ; <[7 x i8]*> [#uses=0]
@str8 = constant [8 x i8] zeroinitializer ; <[8 x i8]*> [#uses=0]
@str9 = constant [9 x i8] zeroinitializer ; <[9 x i8]*> [#uses=0]
@stra = constant [10 x i8] zeroinitializer ; <[10 x i8]*> [#uses=0]
@strb = constant [11 x i8] zeroinitializer ; <[11 x i8]*> [#uses=0]
@strc = constant [12 x i8] zeroinitializer ; <[12 x i8]*> [#uses=0]
@strd = constant [13 x i8] zeroinitializer ; <[13 x i8]*> [#uses=0]
@stre = constant [14 x i8] zeroinitializer ; <[14 x i8]*> [#uses=0]
@strf = constant [15 x i8] zeroinitializer ; <[15 x i8]*> [#uses=0]
@strg = constant [16 x i8] zeroinitializer ; <[16 x i8]*> [#uses=0]
@strh = constant [17 x i8] zeroinitializer ; <[17 x i8]*> [#uses=0]
%struct1 = type { int, void (%struct2*)*, %myint *, int (uint *)* }
declare void @func(%struct2*)
%driver1 = global %struct1 zeroinitializer ; <%struct1*> [#uses=1]
%m1 = external global [1 x sbyte] * ; <%struct.task_struct**> [#uses=0]
;%m1 = external global uint ; <%struct.task_struct**> [#uses=0]
%str1 = constant [1 x ubyte] zeroinitializer
%str2 = constant [2 x ubyte] zeroinitializer
%str3 = constant [3 x ubyte] zeroinitializer
%str4 = constant [4 x ubyte] zeroinitializer
%str5 = constant [5 x ubyte] zeroinitializer
%str6 = constant [6 x ubyte] zeroinitializer
%str7 = constant [7 x ubyte] zeroinitializer
%str8 = constant [8 x ubyte] zeroinitializer
%str9 = constant [9 x ubyte] zeroinitializer
%stra = constant [10 x ubyte] zeroinitializer
%strb = constant [11 x ubyte] zeroinitializer
%strc = constant [12 x ubyte] zeroinitializer
%strd = constant [13 x ubyte] zeroinitializer
%stre = constant [14 x ubyte] zeroinitializer
%strf = constant [15 x ubyte] zeroinitializer
%strg = constant [16 x ubyte] zeroinitializer
%strh = constant [17 x ubyte] zeroinitializer
implementation ; Functions:
declare void %func(%struct2*)
void %tty_init() {
define void @tty_init() {
entry:
volatile store void (%struct2*)* %func, void (%struct2 *)** getelementptr (%struct1* %driver1, uint 0, uint 1)
volatile store void (%struct2*)* @func, void (%struct2*)** getelementptr (%struct1* @driver1, i64 0, i32 1)
ret void
}

View File

@ -1,25 +1,15 @@
; This file is used by testlink1.ll, so it doesn't actually do anything itself
;
; RUN: echo
target endian = little
target pointersize = 32
%myint = type ushort
target datalayout = "e-p:32:32"
%myint = type i16
%struct1 = type { i32, void (%struct2*)*, i16*, i32 (i32*)* }
%struct2 = type { %struct1 }
%struct1 = type { int, void (%struct2*)*, %myint *, int (uint *)* }
implementation ; Functions:
internal void %f1 (%struct1* %tty) {
define internal void @f1(%struct1* %tty) {
loopentry.preheader:
; <void (%struct2*, ubyte)**> [#uses=1]
; <void (%struct2*, ubyte)*> [#uses=0]
%tmp.2.i.i = getelementptr %struct1* %tty, uint 0, uint 1
%tmp.3.i.i = volatile load void (%struct2*)** %tmp.2.i.i
%tmp.2.i.i = getelementptr %struct1* %tty, i64 0, i32 1 ; <void (%struct2*)**> [#uses=1]
%tmp.3.i.i = volatile load void (%struct2*)** %tmp.2.i.i ; <void (%struct2*)*> [#uses=0]
ret void
}

View File

@ -2,7 +2,7 @@
; to be nonconst.
; RUN: echo {@X = global i32 7} | llvm-as > %t.2.bc
; RUN: llvm-upgrade < %s | llvm-as > %t.1.bc
; RUN: llvm-as < %s > %t.1.bc
; RUN: llvm-link %t.1.bc %t.2.bc | llvm-dis | grep {global i32 7}
@X = external constant i32
@X = external constant i32 ; <i32*> [#uses=0]

View File

@ -1,9 +1,10 @@
; RUN: echo { @G = appending global \[0 x i32\] zeroinitializer } | \
; RUN: llvm-as > %t.out2.bc
; RUN: llvm-upgrade < %s | llvm-as > %t.out1.bc
; RUN: llvm-as < %s > %t.out1.bc
; RUN: llvm-link %t.out1.bc %t.out2.bc | llvm-dis | grep {@G =}
; When linked, the globals should be merged, and the result should still
; be named '@G'.
%G = appending global [1 x int] zeroinitializer
@G = appending global [1 x i32] zeroinitializer ; <[1 x i32]*> [#uses=0]

View File

@ -1,15 +1,13 @@
; RUN: llvm-upgrade < %s | llvm-as -f -o %t1.bc
; RUN: llvm-as < %s -f -o %t1.bc
; RUN: llvm-link -f -o %t2.bc %t1.bc
target endian = big
target pointersize = 32
target datalayout = "E-p:32:32"
target triple = "powerpc-apple-darwin7.7.0"
deplibs = [ "c", "crtend" ]
%source = global <4 x int> < int 0, int 1, int 2, int 3 >
@source = global <4 x i32> < i32 0, i32 1, i32 2, i32 3 > ; <<4 x i32>*> [#uses=0]
implementation ; Functions:
int %main() {
define i32 @main() {
entry:
ret int 0
ret i32 0
}

View File

@ -1,15 +1,15 @@
; Test that appending linkage works correctly.
; RUN: echo {%X = appending global \[1 x int\] \[int 8\] } | \
; RUN: llvm-upgrade | llvm-as > %t.2.bc
; RUN: llvm-upgrade < %s | llvm-as > %t.1.bc
; RUN: echo {@X = appending global \[1 x i32\] \[i32 8\] } | \
; RUN: llvm-as > %t.2.bc
; RUN: llvm-as < %s > %t.1.bc
; RUN: llvm-link %t.1.bc %t.2.bc | llvm-dis | grep 7 | grep 4 | grep 8
%X = appending global [2 x int] [int 7, int 4]
@X = appending global [2 x i32] [ i32 7, i32 4 ] ; <[2 x i32]*> [#uses=2]
@Y = global i32* getelementptr ([2 x i32]* @X, i64 0, i64 0) ; <i32**> [#uses=0]
%Y = global int* getelementptr ([2 x int]* %X, long 0, long 0)
void %foo(long %V) {
%Y = getelementptr [2 x int]* %X, long 0, long %V
ret void
define void @foo(i64 %V) {
%Y = getelementptr [2 x i32]* @X, i64 0, i64 %V ; <i32*> [#uses=0]
ret void
}

View File

@ -1,8 +1,8 @@
; Test that appending linkage works correctly when arrays are the same size.
; RUN: echo {%X = appending global \[1 x int\] \[int 8\] } | \
; RUN: llvm-upgrade | llvm-as > %t.2.bc
; RUN: llvm-upgrade < %s | llvm-as > %t.1.bc
; RUN: echo {@X = appending global \[1 x i32\] \[i32 8\] } | \
; RUN: llvm-as > %t.2.bc
; RUN: llvm-as < %s > %t.1.bc
; RUN: llvm-link %t.1.bc %t.2.bc | llvm-dis | grep 7 | grep 8
%X = appending global [1 x int] [int 7]
@X = appending global [1 x i32] [ i32 7 ] ; <[1 x i32]*> [#uses=0]

View File

@ -1,8 +1,9 @@
; Test that appending linkage works correctly when arrays are the same size.
; RUN: echo {%X = constant \[1 x int\] \[int 8\] } | \
; RUN: llvm-upgrade | llvm-as > %t.2.bc
; RUN: llvm-upgrade < %s | llvm-as > %t.1.bc
; RUN: echo {@X = constant \[1 x i32\] \[i32 8\] } | \
; RUN: llvm-as > %t.2.bc
; RUN: llvm-as < %s > %t.1.bc
; RUN: llvm-link %t.1.bc %t.2.bc | llvm-dis | grep constant
%X = uninitialized global [1 x int]
@X = external global [1 x i32] ; <[1 x i32]*> [#uses=0]

View File

@ -1,8 +1,9 @@
; Test that appending linkage works correctly when arrays are the same size.
; RUN: echo {%X = external global \[1 x int\] } | \
; RUN: llvm-upgrade | llvm-as > %t.2.bc
; RUN: llvm-upgrade %s -o - | llvm-as > %t.1.bc
; RUN: echo {@X = external global \[1 x i32\] } | \
; RUN: llvm-as > %t.2.bc
; RUN: llvm-as < %s > %t.1.bc
; RUN: llvm-link %t.1.bc %t.2.bc | llvm-dis | grep constant
%X = constant [1 x int] [ int 12 ]
@X = constant [1 x i32] [ i32 12 ] ; <[1 x i32]*> [#uses=0]

View File

@ -1,8 +1,8 @@
; Test that appending linkage works correctly when arrays are the same size.
; RUN: echo {%X = external constant \[1 x int\] } | \
; RUN: llvm-upgrade | llvm-as > %t.2.bc
; RUN: llvm-upgrade %s | llvm-as > %t.1.bc
; RUN: echo {@X = external constant \[1 x i32\] } | \
; RUN: llvm-as > %t.2.bc
; RUN: llvm-as < %s > %t.1.bc
; RUN: llvm-link %t.1.bc %t.2.bc | llvm-dis | grep constant
%X = uninitialized global [1 x int]
@X = external global [1 x i32] ; <[1 x i32]*> [#uses=0]

View File

@ -1,8 +1,8 @@
; This fails because the linker renames the non-opaque type not the opaque
; one...
; RUN: echo "%X = linkonce global int 8" | llvm-upgrade | llvm-as > %t.2.bc
; RUN: llvm-upgrade < %s | llvm-as > %t.1.bc
; RUN: echo "@X = linkonce global i32 8" | llvm-as > %t.2.bc
; RUN: llvm-as < %s > %t.1.bc
; RUN: llvm-link %t.1.bc %t.2.bc | llvm-dis
%X = linkonce global int 7
@X = linkonce global i32 7 ; <i32*> [#uses=0]

View File

@ -1,48 +1,42 @@
; RUN: llvm-upgrade < %s | llvm-as > %t.bc
; RUN: llvm-upgrade < %p/testlink2.ll | llvm-as > %t2.bc
; RUN: llvm-as < %s > %t.bc
; RUN: llvm-as < %p/testlink2.ll > %t2.bc
; RUN: llvm-link %t.bc %t2.bc
%MyVar = external global int
%MyIntList = global { \2 *, int } { { \2, int }* null, int 17 }
external global int ; int*:0
@MyVar = external global i32 ; <i32*> [#uses=3]
@MyIntList = global { \2*, i32 } { { \2*, i32 }* null, i32 17 } ; <{ \2*, i32 }*> [#uses=1]
external global i32 ; <i32*>:0 [#uses=0]
@Inte = global i32 1 ; <i32*> [#uses=0]
@AConst = linkonce constant i32 123 ; <i32*> [#uses=0]
@Intern1 = internal constant i32 42 ; <i32*> [#uses=0]
@Intern2 = internal constant i32 792 ; <i32*> [#uses=0]
@MyVarPtr = linkonce global { i32* } { i32* @MyVar } ; <{ i32* }*> [#uses=0]
%Inte = global int 1
declare i32 @foo(i32)
%AConst = linkonce constant int 123
%Intern1 = internal constant int 42
%Intern2 = internal constant int 792
; Initialized to point to external %MyVar
%MyVarPtr = linkonce global { int * } { int * %MyVar }
declare int "foo"(int %blah) ;; Declared in testlink2.ll
declare void "print"(int %Value)
implementation
void "main"()
begin
%v1 = load int* %MyVar
call void %print(int %v1) ;; Should start out 4
%idx = getelementptr { \2 *, int }* %MyIntList, long 0, uint 1
%v2 = load int* %idx
call void %print(int %v2) ;; Should start out 17
call int %foo(int 5) ;; Modify global variablesx
%v3 = load int* %MyVar
call void %print(int %v3) ;; Should now be 5
%v4 = load int* %idx
call void %print(int %v4) ;; Should start out 12
declare void @print(i32)
define void @main() {
%v1 = load i32* @MyVar ; <i32> [#uses=1]
call void @print( i32 %v1 )
%idx = getelementptr { \2*, i32 }* @MyIntList, i64 0, i32 1 ; <i32*> [#uses=2]
%v2 = load i32* %idx ; <i32> [#uses=1]
call void @print( i32 %v2 )
call i32 @foo( i32 5 ) ; <i32>:1 [#uses=0]
%v3 = load i32* @MyVar ; <i32> [#uses=1]
call void @print( i32 %v3 )
%v4 = load i32* %idx ; <i32> [#uses=1]
call void @print( i32 %v4 )
ret void
end
}
internal void "testintern"() begin ret void end
internal void "Testintern"() begin ret void end
void "testIntern"() begin ret void end
define internal void @testintern() {
ret void
}
define internal void @Testintern() {
ret void
}
define void @testIntern() {
ret void
}

View File

@ -2,35 +2,40 @@
;
; RUN: true
%MyVar = global int 4
%MyIntList = external global { \2 *, int }
@MyVar = global i32 4 ; <i32*> [#uses=2]
@MyIntList = external global { \2*, i32 } ; <{ \2*, i32 }*> [#uses=2]
@AConst = constant i32 123 ; <i32*> [#uses=0]
%AConst = constant int 123
;; Intern in both testlink[12].ll
@Intern1 = internal constant i32 52 ; <i32*> [#uses=0]
%Intern1 = internal constant int 52 ;; Intern in both testlink[12].ll
%Intern2 = constant int 12345 ;; Intern in one but not in other
;; Intern in one but not in other
@Intern2 = constant i32 12345 ; <i32*> [#uses=0]
%MyIntListPtr = constant { {\2,int}* } { {\2,int}* %MyIntList }
%MyVarPtr = linkonce global { int * } { int * %MyVar }
@MyIntListPtr = constant { { \2*, i32 }* } { { \2*, i32 }* @MyIntList } ; <{ { \2*, i32 }* }*> [#uses=0]
@MyVarPtr = linkonce global { i32* } { i32* @MyVar } ; <{ i32* }*> [#uses=0]
constant i32 412 ; <i32*>:0 [#uses=1]
constant int 412
define i32 @foo(i32 %blah) {
store i32 %blah, i32* @MyVar
%idx = getelementptr { \2*, i32 }* @MyIntList, i64 0, i32 1 ; <i32*> [#uses=1]
store i32 12, i32* %idx
%ack = load i32* @0 ; <i32> [#uses=1]
%fzo = add i32 %ack, %blah ; <i32> [#uses=1]
ret i32 %fzo
}
implementation
declare void @unimp(float, double)
int "foo"(int %blah)
begin
store int %blah, int *%MyVar
%idx = getelementptr { \2 *, int } * %MyIntList, long 0, uint 1
store int 12, int* %idx
define internal void @testintern() {
ret void
}
%ack = load int * %0 ;; Load from the unnamed constant
%fzo = add int %ack, %blah
ret int %fzo
end
define void @Testintern() {
ret void
}
declare void "unimp"(float, double)
internal void "testintern"() begin ret void end
void "Testintern"() begin ret void end
internal void "testIntern"() begin ret void end
define internal void @testIntern() {
ret void
}

View File

@ -1,12 +1,11 @@
; RUN: llvm-upgrade < %s | llvm-as > %t.bc
; RUN: llvm-upgrade < %p/testlink1.ll | llvm-as > %t2.bc
; RUN: llvm-as < %s > %t.bc
; RUN: llvm-as < %p/testlink1.ll > %t2.bc
; RUN: llvm-link %t.bc %t.bc %t2.bc -o %t1.bc -f
; RUN: llvm-dis < %t1.bc | grep {kallsyms_names = extern_weak}
; RUN: llvm-dis < %t1.bc | grep {MyVar = external global i32}
; RUN: llvm-dis < %t1.bc | grep {Inte = global i32}
%kallsyms_names = extern_weak global [0 x ubyte]
%MyVar = extern_weak global int
%Inte = extern_weak global int
@kallsyms_names = extern_weak global [0 x i8] ; <[0 x i8]*> [#uses=0]
@MyVar = extern_weak global i32 ; <i32*> [#uses=0]
@Inte = extern_weak global i32 ; <i32*> [#uses=0]
implementation

View File

@ -1,24 +1,22 @@
; Basic block #2 should not be merged into BB #3!
;
; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg | llvm-dis | \
; RUN: llvm-as < %s | opt -simplifycfg | llvm-dis | \
; RUN: grep {br label}
;
declare void %foo()
implementation
void "cprop_test12"(int* %data) {
declare void @foo()
define void @cprop_test12(i32* %data) {
bb0:
%reg108 = load int* %data
%cond218 = setne int %reg108, 5
br bool %cond218, label %bb3, label %bb2
bb2:
call void %foo()
br label %bb3
bb3:
%reg117 = phi int [ 110, %bb2 ], [ %reg108, %bb0 ]
store int %reg117, int* %data
ret void
%reg108 = load i32* %data ; <i32> [#uses=2]
%cond218 = icmp ne i32 %reg108, 5 ; <i1> [#uses=1]
br i1 %cond218, label %bb3, label %bb2
bb2: ; preds = %bb0
call void @foo( )
br label %bb3
bb3: ; preds = %bb2, %bb0
%reg117 = phi i32 [ 110, %bb2 ], [ %reg108, %bb0 ] ; <i32> [#uses=1]
store i32 %reg117, i32* %data
ret void
}

View File

@ -4,16 +4,16 @@
;
; Which is not valid SSA
;
; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg | llvm-dis
void "test"() {
br bool true, label %end, label %Loop
Loop:
%V = phi int [0, %0], [%V1, %Loop]
%V1 = add int %V, 1
; RUN: llvm-as < %s | opt -simplifycfg | llvm-dis
define void @test() {
; <label>:0
br i1 true, label %end, label %Loop
Loop: ; preds = %Loop, %0
%V = phi i32 [ 0, %0 ], [ %V1, %Loop ] ; <i32> [#uses=1]
%V1 = add i32 %V, 1 ; <i32> [#uses=1]
br label %Loop
end:
end: ; preds = %0
ret void
}

View File

@ -1,14 +1,14 @@
; -simplifycfg is not folding blocks if there is a PHI node involved. This
; should be fixed eventually
; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg | llvm-dis | not grep br
; RUN: llvm-as < %s | opt -simplifycfg | llvm-dis | not grep br
int %main(int %argc) {
br label %InlinedFunctionReturnNode
InlinedFunctionReturnNode: ;[#uses=1]
%X = phi int [ 7, %0 ] ; <int> [#uses=1]
%Y = add int %X, %argc ; <int> [#uses=1]
ret int %Y
define i32 @main(i32 %argc) {
; <label>:0
br label %InlinedFunctionReturnNode
InlinedFunctionReturnNode: ; preds = %0
%X = phi i32 [ 7, %0 ] ; <i32> [#uses=1]
%Y = add i32 %X, %argc ; <i32> [#uses=1]
ret i32 %Y
}

View File

@ -1,12 +1,13 @@
; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg
; RUN: llvm-as < %s | opt -simplifycfg
int %test(int %A, int %B, bool %cond) {
define i32 @test(i32 %A, i32 %B, i1 %cond) {
J:
%C = add int %A, 12
br bool %cond, label %L, label %L
L:
%Q = phi int [%C, %J], [%C, %J] ; PHI node is obviously redundant
%D = add int %C, %B
%E = add int %Q, %D
ret int %E
%C = add i32 %A, 12 ; <i32> [#uses=3]
br i1 %cond, label %L, label %L
L: ; preds = %J, %J
%Q = phi i32 [ %C, %J ], [ %C, %J ] ; <i32> [#uses=1]
%D = add i32 %C, %B ; <i32> [#uses=1]
%E = add i32 %Q, %D ; <i32> [#uses=1]
ret i32 %E
}

View File

@ -1,22 +1,17 @@
; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg -disable-output
; RUN: llvm-as < %s | opt -simplifycfg -disable-output
implementation ; Functions:
void %test(int* %ldo, bool %c, bool %d) {
define void @test(i32* %ldo, i1 %c, i1 %d) {
bb9:
br bool %c, label %bb11, label %bb10
br i1 %c, label %bb11, label %bb10
bb10: ; preds = %bb9
br label %bb11
bb11: ; preds = %bb10, %bb9
%reg330 = phi int* [ null, %bb10 ], [ %ldo, %bb9 ]
%reg330 = phi i32* [ null, %bb10 ], [ %ldo, %bb9 ] ; <i32*> [#uses=1]
br label %bb20
bb20: ; preds = %bb23, %bb25, %bb27, %bb11
store int* %reg330, int** null
br bool %d, label %bb20, label %done
done:
bb20: ; preds = %bb20, %bb11
store i32* %reg330, i32** null
br i1 %d, label %bb20, label %done
done: ; preds = %bb20
ret void
}

View File

@ -1,11 +1,13 @@
; Do not remove the invoke!
;
; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg -disable-output
; RUN: llvm-as < %s | opt -simplifycfg -disable-output
int %test() {
%A = invoke int %test() to label %Ret except label %Ret2
Ret:
ret int %A
Ret2:
ret int undef
define i32 @test() {
%A = invoke i32 @test( )
to label %Ret unwind label %Ret2 ; <i32> [#uses=1]
Ret: ; preds = %0
ret i32 %A
Ret2: ; preds = %0
ret i32 undef
}

View File

@ -1,10 +1,12 @@
; Do not remove the invoke!
;
; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg | llvm-dis | grep invoke
; RUN: llvm-as < %s | opt -simplifycfg | llvm-dis | grep invoke
int %test() {
invoke int %test() to label %Ret except label %Ret
Ret:
%A = add int 0, 1
ret int %A
define i32 @test() {
invoke i32 @test( )
to label %Ret unwind label %Ret ; <i32>:1 [#uses=0]
Ret: ; preds = %0, %0
%A = add i32 0, 1 ; <i32> [#uses=1]
ret i32 %A
}

View File

@ -1,21 +1,22 @@
; This test checks to make sure that 'br X, Dest, Dest' is folded into
; 'br Dest'
; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg | llvm-dis | \
; RUN: llvm-as < %s | opt -simplifycfg | llvm-dis | \
; RUN: not grep {br bool %c2}
declare void %noop()
declare void @noop()
int %test(bool %c1, bool %c2) {
call void %noop()
br bool %c1, label %A, label %Y
A:
call void %noop()
br bool %c2, label %X, label %X ; Can be converted to unconditional br
X:
call void %noop()
ret int 0
Y:
call void %noop()
define i32 @test(i1 %c1, i1 %c2) {
call void @noop( )
br i1 %c1, label %A, label %Y
A: ; preds = %0
call void @noop( )
br i1 %c2, label %X, label %X
X: ; preds = %Y, %A, %A
call void @noop( )
ret i32 0
Y: ; preds = %0
call void @noop( )
br label %X
}

View File

@ -3,23 +3,24 @@
; due to the fact that the SimplifyCFG function does not use
; the ConstantFoldTerminator function.
; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg | llvm-dis | \
; RUN: llvm-as < %s | opt -simplifycfg | llvm-dis | \
; RUN: not grep {br bool %c2}
declare void %noop()
declare void @noop()
int %test(bool %c1, bool %c2) {
call void %noop()
br bool %c1, label %A, label %Y
A:
call void %noop()
br bool %c2, label %Z, label %X ; Can be converted to unconditional br
Z:
define i32 @test(i1 %c1, i1 %c2) {
call void @noop( )
br i1 %c1, label %A, label %Y
A: ; preds = %0
call void @noop( )
br i1 %c2, label %Z, label %X
Z: ; preds = %A
br label %X
X:
call void %noop()
ret int 0
Y:
call void %noop()
X: ; preds = %Y, %Z, %A
call void @noop( )
ret i32 0
Y: ; preds = %0
call void @noop( )
br label %X
}

View File

@ -1,61 +1,80 @@
; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg | llvm-dis | \
; RUN: llvm-as < %s | opt -simplifycfg | llvm-dis | \
; RUN: not grep switch
int %test1() { ; Test normal folding
switch uint 5, label %Default [
uint 0, label %Foo
uint 1, label %Bar
uint 2, label %Baz
uint 5, label %TheDest
]
Default:ret int -1
Foo: ret int -2
Bar: ret int -3
Baz: ret int -4
TheDest:ret int 1234
; Test normal folding
define i32 @test1() {
switch i32 5, label %Default [
i32 0, label %Foo
i32 1, label %Bar
i32 2, label %Baz
i32 5, label %TheDest
]
Default: ; preds = %0
ret i32 -1
Foo: ; preds = %0
ret i32 -2
Bar: ; preds = %0
ret i32 -3
Baz: ; preds = %0
ret i32 -4
TheDest: ; preds = %0
ret i32 1234
}
int %test2() { ; Test folding to default dest
switch uint 3, label %Default [
uint 0, label %Foo
uint 1, label %Bar
uint 2, label %Baz
uint 5, label %TheDest
]
Default:ret int 1234
Foo: ret int -2
Bar: ret int -5
Baz: ret int -6
TheDest:ret int -8
; Test folding to default dest
define i32 @test2() {
switch i32 3, label %Default [
i32 0, label %Foo
i32 1, label %Bar
i32 2, label %Baz
i32 5, label %TheDest
]
Default: ; preds = %0
ret i32 1234
Foo: ; preds = %0
ret i32 -2
Bar: ; preds = %0
ret i32 -5
Baz: ; preds = %0
ret i32 -6
TheDest: ; preds = %0
ret i32 -8
}
int %test3(bool %C) { ; Test folding all to same dest
br bool %C, label %Start, label %TheDest
Start:
switch uint 3, label %TheDest [
uint 0, label %TheDest
uint 1, label %TheDest
uint 2, label %TheDest
uint 5, label %TheDest
]
TheDest: ret int 1234
; Test folding all to same dest
define i32 @test3(i1 %C) {
br i1 %C, label %Start, label %TheDest
Start: ; preds = %0
switch i32 3, label %TheDest [
i32 0, label %TheDest
i32 1, label %TheDest
i32 2, label %TheDest
i32 5, label %TheDest
]
TheDest: ; preds = %Start, %Start, %Start, %Start, %Start, %0
ret i32 1234
}
int %test4(uint %C) { ; Test folding switch -> branch
switch uint %C, label %L1 [
uint 0, label %L2
]
L1: ret int 0
L2: ret int 1
; Test folding switch -> branch
define i32 @test4(i32 %C) {
switch i32 %C, label %L1 [
i32 0, label %L2
]
L1: ; preds = %0
ret i32 0
L2: ; preds = %0
ret i32 1
}
int %test5(uint %C) {
switch uint %C, label %L1 [ ; Can fold into a cond branch!
uint 0, label %L2
uint 123, label %L1
]
L1: ret int 0
L2: ret int 1
; Can fold into a cond branch!
define i32 @test5(i32 %C) {
switch i32 %C, label %L1 [
i32 0, label %L2
i32 123, label %L1
]
L1: ; preds = %0, %0
ret i32 0
L2: ; preds = %0
ret i32 1
}

View File

@ -1,59 +1,40 @@
; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg -disable-output
; RUN: llvm-as < %s | opt -simplifycfg -disable-output
implementation ; Functions:
void %symhash_add() {
define void @symhash_add() {
entry:
br bool undef, label %then.0, label %UnifiedReturnBlock
br i1 undef, label %then.0, label %UnifiedReturnBlock
then.0: ; preds = %entry
br bool undef, label %loopentry.2, label %loopentry.1.preheader
br i1 undef, label %loopentry.2, label %loopentry.1.preheader
loopentry.1.preheader: ; preds = %then.0
br label %loopentry.1.outer
loopentry.1.outer: ; preds = %loopentry.1.preheader, %loopexit.1
loopentry.1.outer: ; preds = %loopexit.1, %loopentry.1.preheader
br label %loopentry.1
loopentry.1: ; preds = %loopentry.1.outer, %then.1, %then.3, %then.4, %endif.1
br bool undef, label %loopexit.1, label %no_exit.1
loopentry.1: ; preds = %endif.1, %then.4, %then.3, %then.1, %loopentry.1.outer
br i1 undef, label %loopexit.1, label %no_exit.1
no_exit.1: ; preds = %loopentry.1
br bool undef, label %then.1, label %else.0
br i1 undef, label %then.1, label %else.0
then.1: ; preds = %no_exit.1
br label %loopentry.1
else.0: ; preds = %no_exit.1
br bool undef, label %then.2, label %else.1
br i1 undef, label %then.2, label %else.1
then.2: ; preds = %else.0
br bool undef, label %then.3, label %endif.1
br i1 undef, label %then.3, label %endif.1
then.3: ; preds = %then.2
br label %loopentry.1
else.1: ; preds = %else.0
br bool undef, label %endif.1, label %then.4
br i1 undef, label %endif.1, label %then.4
then.4: ; preds = %else.1
br label %loopentry.1
endif.1: ; preds = %then.2, %else.1
endif.1: ; preds = %else.1, %then.2
br label %loopentry.1
loopexit.1: ; preds = %loopentry.1
br bool undef, label %loopentry.1.outer, label %loopentry.2
loopentry.2: ; preds = %then.0, %loopexit.1, %no_exit.2
br bool undef, label %loopexit.2, label %no_exit.2
br i1 undef, label %loopentry.1.outer, label %loopentry.2
loopentry.2: ; preds = %no_exit.2, %loopexit.1, %then.0
br i1 undef, label %loopexit.2, label %no_exit.2
no_exit.2: ; preds = %loopentry.2
br label %loopentry.2
loopexit.2: ; preds = %loopentry.2
ret void
UnifiedReturnBlock: ; preds = %entry
ret void
}

View File

@ -1,125 +1,95 @@
; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg -disable-output
; RUN: llvm-as < %s | opt -simplifycfg -disable-output
; PR584
@g_38098584 = external global i32 ; <i32*> [#uses=1]
@g_60187400 = external global i32 ; <i32*> [#uses=1]
@g_59182229 = external global i32 ; <i32*> [#uses=2]
%g_38098584 = external global uint ; <uint*> [#uses=1]
%g_60187400 = external global uint ; <uint*> [#uses=1]
%g_59182229 = external global uint ; <uint*> [#uses=2]
implementation ; Functions:
int %_Z13func_26556482h(ubyte %l_88173906) {
define i32 @_Z13func_26556482h(i8 %l_88173906) {
entry:
%tmp.1 = cast ubyte %l_88173906 to sbyte ; <sbyte> [#uses=2]
%tmp.3 = seteq ubyte %l_88173906, 0 ; <bool> [#uses=1]
br bool %tmp.3, label %else.0, label %then.0
%tmp.1 = bitcast i8 %l_88173906 to i8 ; <i8> [#uses=2]
%tmp.3 = icmp eq i8 %l_88173906, 0 ; <i1> [#uses=1]
br i1 %tmp.3, label %else.0, label %then.0
then.0: ; preds = %entry
%tmp.5 = seteq ubyte %l_88173906, 0 ; <bool> [#uses=1]
br bool %tmp.5, label %else.1, label %then.1
%tmp.5 = icmp eq i8 %l_88173906, 0 ; <i1> [#uses=1]
br i1 %tmp.5, label %else.1, label %then.1
then.1: ; preds = %then.0
br label %return
else.1: ; preds = %then.0
br label %loopentry.0
loopentry.0: ; preds = %no_exit.0, %else.1
%i.0.1 = phi int [ 0, %else.1 ], [ %inc.0, %no_exit.0 ] ; <int> [#uses=2]
%tmp.9 = setgt int %i.0.1, 99 ; <bool> [#uses=1]
br bool %tmp.9, label %endif.0, label %no_exit.0
%i.0.1 = phi i32 [ 0, %else.1 ], [ %inc.0, %no_exit.0 ] ; <i32> [#uses=2]
%tmp.9 = icmp sgt i32 %i.0.1, 99 ; <i1> [#uses=1]
br i1 %tmp.9, label %endif.0, label %no_exit.0
no_exit.0: ; preds = %loopentry.0
%inc.0 = add int %i.0.1, 1 ; <int> [#uses=1]
%inc.0 = add i32 %i.0.1, 1 ; <i32> [#uses=1]
br label %loopentry.0
else.0: ; preds = %entry
%tmp.12 = cast sbyte %tmp.1 to int ; <int> [#uses=1]
%tmp.12 = sext i8 %tmp.1 to i32 ; <i32> [#uses=1]
br label %return
endif.0: ; preds = %loopentry.0
%tmp.14 = cast sbyte %tmp.1 to int ; <int> [#uses=1]
%tmp.16 = cast ubyte %l_88173906 to int ; <int> [#uses=1]
%tmp.17 = setgt int %tmp.14, %tmp.16 ; <bool> [#uses=1]
%tmp.19 = load uint* %g_59182229 ; <uint> [#uses=2]
br bool %tmp.17, label %cond_true, label %cond_false
%tmp.14 = sext i8 %tmp.1 to i32 ; <i32> [#uses=1]
%tmp.16 = zext i8 %l_88173906 to i32 ; <i32> [#uses=1]
%tmp.17 = icmp sgt i32 %tmp.14, %tmp.16 ; <i1> [#uses=1]
%tmp.19 = load i32* @g_59182229 ; <i32> [#uses=2]
br i1 %tmp.17, label %cond_true, label %cond_false
cond_true: ; preds = %endif.0
%tmp.20 = setne uint %tmp.19, 1 ; <bool> [#uses=1]
%tmp.20 = icmp ne i32 %tmp.19, 1 ; <i1> [#uses=1]
br label %cond_continue
cond_false: ; preds = %endif.0
%tmp.22 = setne uint %tmp.19, 0 ; <bool> [#uses=1]
%tmp.22 = icmp ne i32 %tmp.19, 0 ; <i1> [#uses=1]
br label %cond_continue
cond_continue: ; preds = %cond_false, %cond_true
%mem_tmp.0 = phi bool [ %tmp.20, %cond_true ], [ %tmp.22, %cond_false ] ; <bool> [#uses=1]
br bool %mem_tmp.0, label %then.2, label %else.2
%mem_tmp.0 = phi i1 [ %tmp.20, %cond_true ], [ %tmp.22, %cond_false ] ; <i1> [#uses=1]
br i1 %mem_tmp.0, label %then.2, label %else.2
then.2: ; preds = %cond_continue
%tmp.25 = cast ubyte %l_88173906 to int ; <int> [#uses=1]
%tmp.25 = zext i8 %l_88173906 to i32 ; <i32> [#uses=1]
br label %return
else.2: ; preds = %cond_continue
br label %loopentry.1
loopentry.1: ; preds = %endif.3, %else.2
%i.1.1 = phi int [ 0, %else.2 ], [ %inc.3, %endif.3 ] ; <int> [#uses=2]
%i.3.2 = phi int [ undef, %else.2 ], [ %i.3.0, %endif.3 ] ; <int> [#uses=2]
%l_88173906_addr.1 = phi ubyte [ %l_88173906, %else.2 ], [ %l_88173906_addr.0, %endif.3 ] ; <ubyte> [#uses=3]
%tmp.29 = setgt int %i.1.1, 99 ; <bool> [#uses=1]
br bool %tmp.29, label %endif.2, label %no_exit.1
%i.1.1 = phi i32 [ 0, %else.2 ], [ %inc.3, %endif.3 ] ; <i32> [#uses=2]
%i.3.2 = phi i32 [ undef, %else.2 ], [ %i.3.0, %endif.3 ] ; <i32> [#uses=2]
%l_88173906_addr.1 = phi i8 [ %l_88173906, %else.2 ], [ %l_88173906_addr.0, %endif.3 ] ; <i8> [#uses=3]
%tmp.29 = icmp sgt i32 %i.1.1, 99 ; <i1> [#uses=1]
br i1 %tmp.29, label %endif.2, label %no_exit.1
no_exit.1: ; preds = %loopentry.1
%tmp.30 = load uint* %g_38098584 ; <uint> [#uses=1]
%tmp.31 = seteq uint %tmp.30, 0 ; <bool> [#uses=1]
br bool %tmp.31, label %else.3, label %then.3
%tmp.30 = load i32* @g_38098584 ; <i32> [#uses=1]
%tmp.31 = icmp eq i32 %tmp.30, 0 ; <i1> [#uses=1]
br i1 %tmp.31, label %else.3, label %then.3
then.3: ; preds = %no_exit.1
br label %endif.3
else.3: ; preds = %no_exit.1
br bool false, label %else.4, label %then.4
br i1 false, label %else.4, label %then.4
then.4: ; preds = %else.3
br label %endif.3
else.4: ; preds = %else.3
br bool false, label %else.5, label %then.5
br i1 false, label %else.5, label %then.5
then.5: ; preds = %else.4
store uint 3290648471, uint* %g_59182229
store i32 -1004318825, i32* @g_59182229
br label %return
else.5: ; preds = %else.4
br label %loopentry.3
loopentry.3: ; preds = %then.7, %else.5
%i.3.3 = phi int [ 0, %else.5 ], [ %inc.2, %then.7 ] ; <int> [#uses=3]
%tmp.55 = setgt int %i.3.3, 99 ; <bool> [#uses=1]
br bool %tmp.55, label %endif.3, label %no_exit.3
%i.3.3 = phi i32 [ 0, %else.5 ], [ %inc.2, %then.7 ] ; <i32> [#uses=3]
%tmp.55 = icmp sgt i32 %i.3.3, 99 ; <i1> [#uses=1]
br i1 %tmp.55, label %endif.3, label %no_exit.3
no_exit.3: ; preds = %loopentry.3
%tmp.57 = seteq ubyte %l_88173906_addr.1, 0 ; <bool> [#uses=1]
br bool %tmp.57, label %else.7, label %then.7
%tmp.57 = icmp eq i8 %l_88173906_addr.1, 0 ; <i1> [#uses=1]
br i1 %tmp.57, label %else.7, label %then.7
then.7: ; preds = %no_exit.3
store uint 16239, uint* %g_60187400
%inc.2 = add int %i.3.3, 1 ; <int> [#uses=1]
store i32 16239, i32* @g_60187400
%inc.2 = add i32 %i.3.3, 1 ; <i32> [#uses=1]
br label %loopentry.3
else.7: ; preds = %no_exit.3
br label %return
endif.3: ; preds = %loopentry.3, %then.4, %then.3
%i.3.0 = phi int [ %i.3.2, %then.3 ], [ %i.3.2, %then.4 ], [ %i.3.3, %loopentry.3 ] ; <int> [#uses=1]
%l_88173906_addr.0 = phi ubyte [ 100, %then.3 ], [ %l_88173906_addr.1, %then.4 ], [ %l_88173906_addr.1, %loopentry.3 ] ; <ubyte> [#uses=1]
%inc.3 = add int %i.1.1, 1 ; <int> [#uses=1]
%i.3.0 = phi i32 [ %i.3.2, %then.3 ], [ %i.3.2, %then.4 ], [ %i.3.3, %loopentry.3 ] ; <i32> [#uses=1]
%l_88173906_addr.0 = phi i8 [ 100, %then.3 ], [ %l_88173906_addr.1, %then.4 ], [ %l_88173906_addr.1, %loopentry.3 ] ; <i8> [#uses=1]
%inc.3 = add i32 %i.1.1, 1 ; <i32> [#uses=1]
br label %loopentry.1
endif.2: ; preds = %loopentry.1
br label %return
return: ; preds = %endif.2, %else.7, %then.5, %then.2, %else.0, %then.1
%result.0 = phi int [ 1624650671, %then.1 ], [ %tmp.25, %then.2 ], [ 3379, %then.5 ], [ 52410, %else.7 ], [ -1526438411, %endif.2 ], [ %tmp.12, %else.0 ] ; <int> [#uses=1]
ret int %result.0
%result.0 = phi i32 [ 1624650671, %then.1 ], [ %tmp.25, %then.2 ], [ 3379, %then.5 ], [ 52410, %else.7 ], [ -1526438411, %endif.2 ], [ %tmp.12, %else.0 ] ; <i32> [#uses=1]
ret i32 %result.0
}

View File

@ -1,96 +1,71 @@
; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg -disable-output
; RUN: llvm-as < %s | opt -simplifycfg -disable-output
; END.
void %main() {
define void @main() {
entry:
%tmp.14.i19 = seteq int 0, 2 ; <bool> [#uses=1]
br bool %tmp.14.i19, label %endif.1.i20, label %read_min.exit
%tmp.14.i19 = icmp eq i32 0, 2 ; <i1> [#uses=1]
br i1 %tmp.14.i19, label %endif.1.i20, label %read_min.exit
endif.1.i20: ; preds = %entry
%tmp.9.i.i = seteq sbyte* null, null ; <bool> [#uses=1]
br bool %tmp.9.i.i, label %then.i12.i, label %then.i.i
%tmp.9.i.i = icmp eq i8* null, null ; <i1> [#uses=1]
br i1 %tmp.9.i.i, label %then.i12.i, label %then.i.i
then.i.i: ; preds = %endif.1.i20
ret void
then.i12.i: ; preds = %endif.1.i20
%tmp.9.i4.i = seteq sbyte* null, null ; <bool> [#uses=1]
br bool %tmp.9.i4.i, label %endif.2.i33, label %then.i5.i
%tmp.9.i4.i = icmp eq i8* null, null ; <i1> [#uses=1]
br i1 %tmp.9.i4.i, label %endif.2.i33, label %then.i5.i
then.i5.i: ; preds = %then.i12.i
ret void
endif.2.i33: ; preds = %then.i12.i
br bool false, label %loopexit.0.i40, label %no_exit.0.i35
br i1 false, label %loopexit.0.i40, label %no_exit.0.i35
no_exit.0.i35: ; preds = %no_exit.0.i35, %endif.2.i33
%tmp.130.i = setlt int 0, 0 ; <bool> [#uses=1]
br bool %tmp.130.i, label %loopexit.0.i40.loopexit, label %no_exit.0.i35
%tmp.130.i = icmp slt i32 0, 0 ; <i1> [#uses=1]
br i1 %tmp.130.i, label %loopexit.0.i40.loopexit, label %no_exit.0.i35
loopexit.0.i40.loopexit: ; preds = %no_exit.0.i35
br label %loopexit.0.i40
loopexit.0.i40: ; preds = %loopexit.0.i40.loopexit, %endif.2.i33
%tmp.341.i = seteq int 0, 0 ; <bool> [#uses=1]
br bool %tmp.341.i, label %loopentry.1.i, label %read_min.exit
%tmp.341.i = icmp eq i32 0, 0 ; <i1> [#uses=1]
br i1 %tmp.341.i, label %loopentry.1.i, label %read_min.exit
loopentry.1.i: ; preds = %loopexit.0.i40
%tmp.347.i = setgt int 0, 0 ; <bool> [#uses=1]
br bool %tmp.347.i, label %no_exit.1.i41, label %loopexit.2.i44
%tmp.347.i = icmp sgt i32 0, 0 ; <i1> [#uses=1]
br i1 %tmp.347.i, label %no_exit.1.i41, label %loopexit.2.i44
no_exit.1.i41: ; preds = %endif.5.i, %loopentry.1.i
%indvar.i42 = phi uint [ %indvar.next.i, %endif.5.i ], [ 0, %loopentry.1.i ] ; <uint> [#uses=1]
%tmp.355.i = seteq int 0, 3 ; <bool> [#uses=1]
br bool %tmp.355.i, label %endif.5.i, label %read_min.exit
%indvar.i42 = phi i32 [ %indvar.next.i, %endif.5.i ], [ 0, %loopentry.1.i ] ; <i32> [#uses=1]
%tmp.355.i = icmp eq i32 0, 3 ; <i1> [#uses=1]
br i1 %tmp.355.i, label %endif.5.i, label %read_min.exit
endif.5.i: ; preds = %no_exit.1.i41
%tmp.34773.i = setgt int 0, 0 ; <bool> [#uses=1]
%indvar.next.i = add uint %indvar.i42, 1 ; <uint> [#uses=1]
br bool %tmp.34773.i, label %no_exit.1.i41, label %loopexit.1.i.loopexit
%tmp.34773.i = icmp sgt i32 0, 0 ; <i1> [#uses=1]
%indvar.next.i = add i32 %indvar.i42, 1 ; <i32> [#uses=1]
br i1 %tmp.34773.i, label %no_exit.1.i41, label %loopexit.1.i.loopexit
loopexit.1.i.loopexit: ; preds = %endif.5.i
ret void
loopexit.2.i44: ; preds = %loopentry.1.i
ret void
read_min.exit: ; preds = %no_exit.1.i41, %loopexit.0.i40, %entry
%tmp.23 = seteq int 0, 0 ; <bool> [#uses=1]
br bool %tmp.23, label %endif.1, label %then.1
%tmp.23 = icmp eq i32 0, 0 ; <i1> [#uses=1]
br i1 %tmp.23, label %endif.1, label %then.1
then.1: ; preds = %read_min.exit
br bool false, label %endif.0.i, label %then.0.i
br i1 false, label %endif.0.i, label %then.0.i
then.0.i: ; preds = %then.1
br bool false, label %endif.1.i, label %then.1.i
br i1 false, label %endif.1.i, label %then.1.i
endif.0.i: ; preds = %then.1
br bool false, label %endif.1.i, label %then.1.i
br i1 false, label %endif.1.i, label %then.1.i
then.1.i: ; preds = %endif.0.i, %then.0.i
br bool false, label %getfree.exit, label %then.2.i
br i1 false, label %getfree.exit, label %then.2.i
endif.1.i: ; preds = %endif.0.i, %then.0.i
br bool false, label %getfree.exit, label %then.2.i
br i1 false, label %getfree.exit, label %then.2.i
then.2.i: ; preds = %endif.1.i, %then.1.i
ret void
getfree.exit: ; preds = %endif.1.i, %then.1.i
ret void
endif.1: ; preds = %read_min.exit
%tmp.27.i = getelementptr int* null, int 0
br bool false, label %loopexit.0.i15, label %no_exit.0.i14
%tmp.27.i = getelementptr i32* null, i32 0 ; <i32*> [#uses=0]
br i1 false, label %loopexit.0.i15, label %no_exit.0.i14
no_exit.0.i14: ; preds = %endif.1
ret void
loopexit.0.i15: ; preds = %endif.1
br bool false, label %primal_start_artificial.exit, label %no_exit.1.i16
br i1 false, label %primal_start_artificial.exit, label %no_exit.1.i16
no_exit.1.i16: ; preds = %no_exit.1.i16, %loopexit.0.i15
br bool false, label %primal_start_artificial.exit, label %no_exit.1.i16
br i1 false, label %primal_start_artificial.exit, label %no_exit.1.i16
primal_start_artificial.exit: ; preds = %no_exit.1.i16, %loopexit.0.i15
ret void
}

View File

@ -1,94 +1,74 @@
; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg -disable-output
; RUN: llvm-as < %s | opt -simplifycfg -disable-output
; END.
%arraytype.1.Char = type { int, [0 x sbyte] }
%arraytype.4.Signed = type { int, [0 x int] }
%arraytype.1.Char = type { i32, [0 x i8] }
%arraytype.4.Signed = type { i32, [0 x i32] }
%functiontype.23 = type %structtype.Task* (%structtype.Task*, %structtype.Packet*, %structtype.FailedRun*)
%functiontype.27 = type %structtype.object* ()
%functiontype.28 = type bool (%structtype.object*, %structtype.object_vtable*)
%functiontype.39 = type int (%structtype.listiter*)
%opaquetype.RuntimeTypeInfo = type sbyte* (sbyte*)
%functiontype.28 = type i1 (%structtype.object*, %structtype.object_vtable*)
%functiontype.39 = type i32 (%structtype.listiter*)
%opaquetype.RuntimeTypeInfo = type i8* (i8*)
%structtype.AssertionError_vtable = type { %structtype.FailedRun_vtable }
%structtype.DeviceTask = type { %structtype.Task }
%structtype.FailedRun = type { %structtype.object }
%structtype.FailedRun_vtable = type { %structtype.object_vtable }
%structtype.Packet = type { %structtype.object, %structtype.list.1*, int, int, int, %structtype.Packet* }
%structtype.Task = type { %structtype.TaskState, %structtype.FailedRun*, int, %structtype.Packet*, %structtype.Task*, int }
%structtype.TaskState = type { %structtype.object, bool, bool, bool }
%structtype.Packet = type { %structtype.object, %structtype.list.1*, i32, i32, i32, %structtype.Packet* }
%structtype.Task = type { %structtype.TaskState, %structtype.FailedRun*, i32, %structtype.Packet*, %structtype.Task*, i32 }
%structtype.TaskState = type { %structtype.object, i1, i1, i1 }
%structtype.list.1 = type { %arraytype.4.Signed* }
%structtype.listiter = type { %structtype.list.1*, int }
%structtype.listiter = type { %structtype.list.1*, i32 }
%structtype.object = type { %structtype.object_vtable* }
%structtype.object_vtable = type { %structtype.object_vtable*, %opaquetype.RuntimeTypeInfo*, %arraytype.1.Char*, %functiontype.27* }
%structinstance.59 = external global %structtype.AssertionError_vtable ; <%structtype.AssertionError_vtable*> [#uses=0]
@structinstance.59 = external global %structtype.AssertionError_vtable ; <%structtype.AssertionError_vtable*> [#uses=0]
implementation ; Functions:
declare fastcc i1 @ll_isinstance__objectPtr_object_vtablePtr()
declare fastcc bool %ll_isinstance__objectPtr_object_vtablePtr()
declare fastcc void @ll_listnext__listiterPtr()
declare fastcc void %ll_listnext__listiterPtr()
fastcc void %WorkTask.fn() {
define fastcc void @WorkTask.fn() {
block0:
br label %block1
block1: ; preds = %block0
%v2542 = call fastcc bool %ll_isinstance__objectPtr_object_vtablePtr( ) ; <bool> [#uses=1]
br bool %v2542, label %block4, label %block2
%v2542 = call fastcc i1 @ll_isinstance__objectPtr_object_vtablePtr( ) ; <i1> [#uses=1]
br i1 %v2542, label %block4, label %block2
block2: ; preds = %block1
br label %block3
block3: ; preds = %block2
unwind
block4: ; preds = %block1
br label %block5
block5: ; preds = %block4
%v2565 = seteq %structtype.Packet* null, null ; <bool> [#uses=1]
br bool %v2565, label %block15, label %block6
%v2565 = icmp eq %structtype.Packet* null, null ; <i1> [#uses=1]
br i1 %v2565, label %block15, label %block6
block6: ; preds = %block5
%self_2575 = phi %structtype.DeviceTask* [ null, %block5 ] ; <%structtype.DeviceTask*> [#uses=1]
br bool false, label %block14, label %block7
br i1 false, label %block14, label %block7
block7: ; preds = %block14, %block6
%self_2635 = phi %structtype.DeviceTask* [ %self_2575, %block6 ], [ null, %block14 ] ; <%structtype.DeviceTask*> [#uses=1]
%tmp.124 = getelementptr %structtype.Packet* null, int 0, uint 2 ; <int*> [#uses=0]
%tmp.124 = getelementptr %structtype.Packet* null, i32 0, i32 2 ; <i32*> [#uses=0]
br label %block8
block8: ; preds = %block10, %block7
%self_2672 = phi %structtype.DeviceTask* [ %self_2635, %block7 ], [ null, %block10 ] ; <%structtype.DeviceTask*> [#uses=0]
invoke fastcc void %ll_listnext__listiterPtr( )
invoke fastcc void @ll_listnext__listiterPtr( )
to label %block9 unwind label %block8_exception_handling
block8_exception_handling: ; preds = %block8
br bool false, label %block8_exception_found_branchto_block12, label %block8_not_exception_structinstance.10
br i1 false, label %block8_exception_found_branchto_block12, label %block8_not_exception_structinstance.10
block8_not_exception_structinstance.10: ; preds = %block8_exception_handling
unwind
block8_exception_found_branchto_block12: ; preds = %block8_exception_handling
br label %block12
block9: ; preds = %block8
br bool false, label %block11, label %block10
br i1 false, label %block11, label %block10
block10: ; preds = %block11, %block9
br label %block8
block11: ; preds = %block9
br label %block10
block12: ; preds = %block8_exception_found_branchto_block12
br label %block13
block13: ; preds = %block15, %block12
ret void
block14: ; preds = %block6
br label %block7
block15: ; preds = %block5
%v2586 = phi %structtype.DeviceTask* [ null, %block5 ] ; <%structtype.DeviceTask*> [#uses=0]
br label %block13

View File

@ -1,13 +1,15 @@
; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg -disable-output
; RUN: llvm-as < %s | opt -simplifycfg -disable-output
bool %foo() {
%X = invoke bool %foo() to label %N unwind label %F
F:
ret bool false
N:
br bool %X, label %A, label %B
A:
ret bool true
B:
ret bool true
define i1 @foo() {
%X = invoke i1 @foo( )
to label %N unwind label %F ; <i1> [#uses=1]
F: ; preds = %0
ret i1 false
N: ; preds = %0
br i1 %X, label %A, label %B
A: ; preds = %N
ret i1 true
B: ; preds = %N
ret i1 true
}

View File

@ -1,140 +1,124 @@
; Make sure this doesn't turn into an infinite loop
; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg -constprop -simplifycfg |\
; RUN: llvm-as < %s | opt -simplifycfg -constprop -simplifycfg |\
; RUN: llvm-dis | grep bb86
; END.
%struct.anon = type { i32, i32, i32, i32, [1024 x i8] }
@_zero_ = external global %struct.anon* ; <%struct.anon**> [#uses=2]
@_one_ = external global %struct.anon* ; <%struct.anon**> [#uses=4]
@str = internal constant [4 x i8] c"%d\0A\00" ; <[4 x i8]*> [#uses=0]
%struct.anon = type { uint, int, int, int, [1024 x sbyte] }
%_zero_ = external global %struct.anon* ; <%struct.anon**> [#uses=2]
%_one_ = external global %struct.anon* ; <%struct.anon**> [#uses=4]
%str = internal constant [4 x sbyte] c"%d\0A\00" ; <[4 x sbyte]*> [#uses=1]
declare i32 @bc_compare(%struct.anon*, %struct.anon*)
implementation ; Functions:
declare void @free_num(%struct.anon**)
declare %struct.anon* @copy_num(%struct.anon*)
declare int %bc_compare(%struct.anon*, %struct.anon*)
declare void @init_num(%struct.anon**)
declare void %free_num(%struct.anon**)
declare %struct.anon* @new_num(i32, i32)
declare %struct.anon* %copy_num(%struct.anon*)
declare void @int2num(%struct.anon**, i32)
declare void %init_num(%struct.anon**)
declare void @bc_multiply(%struct.anon*, %struct.anon*, %struct.anon**, i32)
declare %struct.anon* %new_num(int, int)
declare void @bc_raise(%struct.anon*, %struct.anon*, %struct.anon**, i32)
declare void %int2num(%struct.anon**, int)
declare i32 @bc_divide(%struct.anon*, %struct.anon*, %struct.anon**, i32)
declare void %bc_multiply(%struct.anon*, %struct.anon*, %struct.anon**, int)
declare void @bc_add(%struct.anon*, %struct.anon*, %struct.anon**)
declare void %bc_raise(%struct.anon*, %struct.anon*, %struct.anon**, int)
declare i32 @_do_compare(%struct.anon*, %struct.anon*, i32, i32)
declare int %bc_divide(%struct.anon*, %struct.anon*, %struct.anon**, int)
declare i32 @printf(i8*, ...)
declare void %bc_add(%struct.anon*, %struct.anon*, %struct.anon**)
declare int %_do_compare(%struct.anon*, %struct.anon*, int, int)
declare int %printf(sbyte*, ...)
int %bc_sqrt(%struct.anon** %num, int %scale) {
define i32 @bc_sqrt(%struct.anon** %num, i32 %scale) {
entry:
%guess = alloca %struct.anon* ; <%struct.anon**> [#uses=15]
%guess1 = alloca %struct.anon* ; <%struct.anon**> [#uses=12]
%point5 = alloca %struct.anon* ; <%struct.anon**> [#uses=4]
%guess = alloca %struct.anon* ; <%struct.anon**> [#uses=7]
%guess1 = alloca %struct.anon* ; <%struct.anon**> [#uses=7]
%point5 = alloca %struct.anon* ; <%struct.anon**> [#uses=3]
%tmp = load %struct.anon** %num ; <%struct.anon*> [#uses=1]
%tmp1 = load %struct.anon** %_zero_ ; <%struct.anon*> [#uses=1]
%tmp = call int %bc_compare( %struct.anon* %tmp, %struct.anon* %tmp1 ) ; <int> [#uses=2]
%tmp = setlt int %tmp, 0 ; <bool> [#uses=1]
br bool %tmp, label %cond_true, label %cond_false
%tmp1 = load %struct.anon** @_zero_ ; <%struct.anon*> [#uses=1]
%tmp.upgrd.1 = call i32 @bc_compare( %struct.anon* %tmp, %struct.anon* %tmp1 ) ; <i32> [#uses=2]
%tmp.upgrd.2 = icmp slt i32 %tmp.upgrd.1, 0 ; <i1> [#uses=1]
br i1 %tmp.upgrd.2, label %cond_true, label %cond_false
cond_true: ; preds = %entry
ret int 0
ret i32 0
cond_false: ; preds = %entry
%tmp5 = seteq int %tmp, 0 ; <bool> [#uses=1]
br bool %tmp5, label %cond_true6, label %cond_next13
%tmp5 = icmp eq i32 %tmp.upgrd.1, 0 ; <i1> [#uses=1]
br i1 %tmp5, label %cond_true6, label %cond_next13
cond_true6: ; preds = %cond_false
call void %free_num( %struct.anon** %num )
%tmp8 = load %struct.anon** %_zero_ ; <%struct.anon*> [#uses=1]
%tmp9 = call %struct.anon* %copy_num( %struct.anon* %tmp8 ) ; <%struct.anon*> [#uses=1]
call void @free_num( %struct.anon** %num )
%tmp8 = load %struct.anon** @_zero_ ; <%struct.anon*> [#uses=1]
%tmp9 = call %struct.anon* @copy_num( %struct.anon* %tmp8 ) ; <%struct.anon*> [#uses=1]
store %struct.anon* %tmp9, %struct.anon** %num
ret int 1
ret i32 1
cond_next13: ; preds = %cond_false
%tmp15 = load %struct.anon** %num ; <%struct.anon*> [#uses=1]
%tmp16 = load %struct.anon** %_one_ ; <%struct.anon*> [#uses=1]
%tmp17 = call int %bc_compare( %struct.anon* %tmp15, %struct.anon* %tmp16 ) ; <int> [#uses=2]
%tmp19 = seteq int %tmp17, 0 ; <bool> [#uses=1]
br bool %tmp19, label %cond_true20, label %cond_next27
%tmp16 = load %struct.anon** @_one_ ; <%struct.anon*> [#uses=1]
%tmp17 = call i32 @bc_compare( %struct.anon* %tmp15, %struct.anon* %tmp16 ) ; <i32> [#uses=2]
%tmp19 = icmp eq i32 %tmp17, 0 ; <i1> [#uses=1]
br i1 %tmp19, label %cond_true20, label %cond_next27
cond_true20: ; preds = %cond_next13
call void %free_num( %struct.anon** %num )
%tmp22 = load %struct.anon** %_one_ ; <%struct.anon*> [#uses=1]
%tmp23 = call %struct.anon* %copy_num( %struct.anon* %tmp22 ) ; <%struct.anon*> [#uses=1]
call void @free_num( %struct.anon** %num )
%tmp22 = load %struct.anon** @_one_ ; <%struct.anon*> [#uses=1]
%tmp23 = call %struct.anon* @copy_num( %struct.anon* %tmp22 ) ; <%struct.anon*> [#uses=1]
store %struct.anon* %tmp23, %struct.anon** %num
ret int 1
ret i32 1
cond_next27: ; preds = %cond_next13
%tmp29 = load %struct.anon** %num ; <%struct.anon*> [#uses=1]
%tmp30 = getelementptr %struct.anon* %tmp29, int 0, uint 2 ; <int*> [#uses=1]
%tmp31 = load int* %tmp30 ; <int> [#uses=2]
%tmp33 = setge int %tmp31, %scale ; <bool> [#uses=1]
%max = select bool %tmp33, int %tmp31, int %scale ; <int> [#uses=4]
%tmp35 = add int %max, 2 ; <int> [#uses=2]
call void %init_num( %struct.anon** %guess )
call void %init_num( %struct.anon** %guess1 )
%tmp36 = call %struct.anon* %new_num( int 1, int 1 ) ; <%struct.anon*> [#uses=2]
%tmp30 = getelementptr %struct.anon* %tmp29, i32 0, i32 2 ; <i32*> [#uses=1]
%tmp31 = load i32* %tmp30 ; <i32> [#uses=2]
%tmp33 = icmp sge i32 %tmp31, %scale ; <i1> [#uses=1]
%max = select i1 %tmp33, i32 %tmp31, i32 %scale ; <i32> [#uses=4]
%tmp35 = add i32 %max, 2 ; <i32> [#uses=0]
call void @init_num( %struct.anon** %guess )
call void @init_num( %struct.anon** %guess1 )
%tmp36 = call %struct.anon* @new_num( i32 1, i32 1 ) ; <%struct.anon*> [#uses=2]
store %struct.anon* %tmp36, %struct.anon** %point5
%tmp = getelementptr %struct.anon* %tmp36, int 0, uint 4, int 1 ; <sbyte*> [#uses=1]
store sbyte 5, sbyte* %tmp
%tmp39 = setlt int %tmp17, 0 ; <bool> [#uses=1]
br bool %tmp39, label %cond_true40, label %cond_false43
%tmp.upgrd.3 = getelementptr %struct.anon* %tmp36, i32 0, i32 4, i32 1 ; <i8*> [#uses=1]
store i8 5, i8* %tmp.upgrd.3
%tmp39 = icmp slt i32 %tmp17, 0 ; <i1> [#uses=1]
br i1 %tmp39, label %cond_true40, label %cond_false43
cond_true40: ; preds = %cond_next27
%tmp41 = load %struct.anon** %_one_ ; <%struct.anon*> [#uses=1]
%tmp42 = call %struct.anon* %copy_num( %struct.anon* %tmp41 ) ; <%struct.anon*> [#uses=1]
%tmp41 = load %struct.anon** @_one_ ; <%struct.anon*> [#uses=1]
%tmp42 = call %struct.anon* @copy_num( %struct.anon* %tmp41 ) ; <%struct.anon*> [#uses=1]
store %struct.anon* %tmp42, %struct.anon** %guess
br label %bb80.outer
cond_false43: ; preds = %cond_next27
call void %int2num( %struct.anon** %guess, int 10 )
call void @int2num( %struct.anon** %guess, i32 10 )
%tmp45 = load %struct.anon** %num ; <%struct.anon*> [#uses=1]
%tmp46 = getelementptr %struct.anon* %tmp45, int 0, uint 1 ; <int*> [#uses=1]
%tmp47 = load int* %tmp46 ; <int> [#uses=1]
call void %int2num( %struct.anon** %guess1, int %tmp47 )
%tmp46 = getelementptr %struct.anon* %tmp45, i32 0, i32 1 ; <i32*> [#uses=1]
%tmp47 = load i32* %tmp46 ; <i32> [#uses=1]
call void @int2num( %struct.anon** %guess1, i32 %tmp47 )
%tmp48 = load %struct.anon** %guess1 ; <%struct.anon*> [#uses=1]
%tmp49 = load %struct.anon** %point5 ; <%struct.anon*> [#uses=1]
call void %bc_multiply( %struct.anon* %tmp48, %struct.anon* %tmp49, %struct.anon** %guess1, int %max )
call void @bc_multiply( %struct.anon* %tmp48, %struct.anon* %tmp49, %struct.anon** %guess1, i32 %max )
%tmp51 = load %struct.anon** %guess1 ; <%struct.anon*> [#uses=1]
%tmp52 = getelementptr %struct.anon* %tmp51, int 0, uint 2 ; <int*> [#uses=1]
store int 0, int* %tmp52
%tmp52 = getelementptr %struct.anon* %tmp51, i32 0, i32 2 ; <i32*> [#uses=1]
store i32 0, i32* %tmp52
%tmp53 = load %struct.anon** %guess ; <%struct.anon*> [#uses=1]
%tmp54 = load %struct.anon** %guess1 ; <%struct.anon*> [#uses=1]
call void %bc_raise( %struct.anon* %tmp53, %struct.anon* %tmp54, %struct.anon** %guess, int %max )
call void @bc_raise( %struct.anon* %tmp53, %struct.anon* %tmp54, %struct.anon** %guess, i32 %max )
br label %bb80.outer
bb80.outer: ; preds = %cond_true77, %cond_next56
%done.1.ph = phi int [ 1, %cond_true83 ], [0, %cond_true40], [0, %cond_false43] ; <int> [#uses=1]
bb80.outer: ; preds = %cond_true83, %cond_false43, %cond_true40
%done.1.ph = phi i32 [ 1, %cond_true83 ], [ 0, %cond_true40 ], [ 0, %cond_false43 ] ; <i32> [#uses=1]
br label %bb80
bb80: ; preds = %bb80.outer, %cond_true83
%tmp82 = seteq int %done.1.ph, 0 ; <bool> [#uses=1]
br bool %tmp82, label %cond_true83, label %bb86
bb80: ; preds = %cond_true83, %bb80.outer
%tmp82 = icmp eq i32 %done.1.ph, 0 ; <i1> [#uses=1]
br i1 %tmp82, label %cond_true83, label %bb86
cond_true83: ; preds = %bb80
%tmp71 = call int %_do_compare( %struct.anon* null, %struct.anon* null, int 0, int 1 ) ; <int> [#uses=2]
%tmp76 = seteq int %tmp71, 0 ; <bool> [#uses=1]
br bool %tmp76, label %bb80.outer, label %bb80
%tmp71 = call i32 @_do_compare( %struct.anon* null, %struct.anon* null, i32 0, i32 1 ) ; <i32> [#uses=1]
%tmp76 = icmp eq i32 %tmp71, 0 ; <i1> [#uses=1]
br i1 %tmp76, label %bb80.outer, label %bb80
bb86: ; preds = %bb80
call void %free_num( %struct.anon** %num )
call void @free_num( %struct.anon** %num )
%tmp88 = load %struct.anon** %guess ; <%struct.anon*> [#uses=1]
%tmp89 = load %struct.anon** %_one_ ; <%struct.anon*> [#uses=1]
%tmp92 = call int %bc_divide( %struct.anon* %tmp88, %struct.anon* %tmp89, %struct.anon** %num, int %max ) ; <int> [#uses=0]
call void %free_num( %struct.anon** %guess )
call void %free_num( %struct.anon** %guess1 )
call void %free_num( %struct.anon** %point5 )
ret int 1
%tmp89 = load %struct.anon** @_one_ ; <%struct.anon*> [#uses=1]
%tmp92 = call i32 @bc_divide( %struct.anon* %tmp88, %struct.anon* %tmp89, %struct.anon** %num, i32 %max ) ; <i32> [#uses=0]
call void @free_num( %struct.anon** %guess )
call void @free_num( %struct.anon** %guess1 )
call void @free_num( %struct.anon** %point5 )
ret i32 1
}

View File

@ -1,35 +1,27 @@
; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg -disable-output
; RUN: llvm-as < %s | opt -simplifycfg -disable-output
void %polnel_() {
define void @polnel_() {
entry:
%tmp595 = setlt int 0, 0 ; <bool> [#uses=4]
br bool %tmp595, label %bb148.critedge, label %cond_true40
%tmp595 = icmp slt i32 0, 0 ; <i1> [#uses=4]
br i1 %tmp595, label %bb148.critedge, label %cond_true40
bb36: ; preds = %bb43
br bool %tmp595, label %bb43, label %cond_true40
br i1 %tmp595, label %bb43, label %cond_true40
cond_true40: ; preds = %bb46, %cond_true40, %bb36, %entry
%tmp397 = setgt int 0, 0 ; <bool> [#uses=1]
br bool %tmp397, label %bb43, label %cond_true40
%tmp397 = icmp sgt i32 0, 0 ; <i1> [#uses=1]
br i1 %tmp397, label %bb43, label %cond_true40
bb43: ; preds = %cond_true40, %bb36
br bool false, label %bb53, label %bb36
br i1 false, label %bb53, label %bb36
bb46: ; preds = %bb53
br bool %tmp595, label %bb53, label %cond_true40
br i1 %tmp595, label %bb53, label %cond_true40
bb53: ; preds = %bb46, %bb43
br bool false, label %bb102, label %bb46
br i1 false, label %bb102, label %bb46
bb92.preheader: ; preds = %bb102
ret void
bb102: ; preds = %bb53
br bool %tmp595, label %bb148, label %bb92.preheader
br i1 %tmp595, label %bb148, label %bb92.preheader
bb148.critedge: ; preds = %entry
ret void
bb148: ; preds = %bb102
ret void
}

View File

@ -1,613 +1,413 @@
; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg -disable-output
; RUN: llvm-as < %s | opt -simplifycfg -disable-output
; END.
void %main(int %c) {
define void @main(i32 %c) {
entry:
%tmp.9 = seteq int %c, 2 ; <bool> [#uses=1]
br bool %tmp.9, label %endif.0, label %then.0
%tmp.9 = icmp eq i32 %c, 2 ; <i1> [#uses=1]
br i1 %tmp.9, label %endif.0, label %then.0
then.0: ; preds = %entry
ret void
endif.0: ; preds = %entry
br bool false, label %then.1, label %endif.1
br i1 false, label %then.1, label %endif.1
then.1: ; preds = %endif.0
ret void
endif.1: ; preds = %endif.0
br bool false, label %then.2, label %endif.2
br i1 false, label %then.2, label %endif.2
then.2: ; preds = %endif.1
ret void
endif.2: ; preds = %endif.1
br bool false, label %then.3, label %loopentry.0
br i1 false, label %then.3, label %loopentry.0
then.3: ; preds = %endif.2
ret void
loopentry.0: ; preds = %endif.2
br bool false, label %no_exit.0.preheader, label %loopexit.0
br i1 false, label %no_exit.0.preheader, label %loopexit.0
no_exit.0.preheader: ; preds = %loopentry.0
br label %no_exit.0
no_exit.0: ; preds = %endif.4, %no_exit.0.preheader
br bool false, label %then.4, label %endif.4
br i1 false, label %then.4, label %endif.4
then.4: ; preds = %no_exit.0
ret void
endif.4: ; preds = %no_exit.0
br bool false, label %no_exit.0, label %loopexit.0.loopexit
br i1 false, label %no_exit.0, label %loopexit.0.loopexit
loopexit.0.loopexit: ; preds = %endif.4
br label %loopexit.0
loopexit.0: ; preds = %loopexit.0.loopexit, %loopentry.0
br bool false, label %then.5, label %loopentry.1
br i1 false, label %then.5, label %loopentry.1
then.5: ; preds = %loopexit.0
ret void
loopentry.1: ; preds = %loopexit.0
%tmp.143 = setgt int 0, 0 ; <bool> [#uses=4]
br bool %tmp.143, label %no_exit.1.preheader, label %loopexit.1
%tmp.143 = icmp sgt i32 0, 0 ; <i1> [#uses=4]
br i1 %tmp.143, label %no_exit.1.preheader, label %loopexit.1
no_exit.1.preheader: ; preds = %loopentry.1
br label %no_exit.1
no_exit.1: ; preds = %endif.6, %no_exit.1.preheader
br bool false, label %then.6, label %shortcirc_next.3
br i1 false, label %then.6, label %shortcirc_next.3
shortcirc_next.3: ; preds = %no_exit.1
br bool false, label %then.6, label %shortcirc_next.4
br i1 false, label %then.6, label %shortcirc_next.4
shortcirc_next.4: ; preds = %shortcirc_next.3
br bool false, label %then.6, label %endif.6
br i1 false, label %then.6, label %endif.6
then.6: ; preds = %shortcirc_next.4, %shortcirc_next.3, %no_exit.1
ret void
endif.6: ; preds = %shortcirc_next.4
br bool false, label %no_exit.1, label %loopexit.1.loopexit
br i1 false, label %no_exit.1, label %loopexit.1.loopexit
loopexit.1.loopexit: ; preds = %endif.6
br label %loopexit.1
loopexit.1: ; preds = %loopexit.1.loopexit, %loopentry.1
br bool false, label %then.i, label %loopentry.0.i
br i1 false, label %then.i, label %loopentry.0.i
then.i: ; preds = %loopexit.1
ret void
loopentry.0.i: ; preds = %loopexit.1
br bool %tmp.143, label %no_exit.0.i.preheader, label %readvector.exit
br i1 %tmp.143, label %no_exit.0.i.preheader, label %readvector.exit
no_exit.0.i.preheader: ; preds = %loopentry.0.i
br label %no_exit.0.i
no_exit.0.i: ; preds = %loopexit.1.i, %no_exit.0.i.preheader
br bool false, label %no_exit.1.i.preheader, label %loopexit.1.i
br i1 false, label %no_exit.1.i.preheader, label %loopexit.1.i
no_exit.1.i.preheader: ; preds = %no_exit.0.i
br label %no_exit.1.i
no_exit.1.i: ; preds = %loopexit.2.i, %no_exit.1.i.preheader
br bool false, label %no_exit.2.i.preheader, label %loopexit.2.i
br i1 false, label %no_exit.2.i.preheader, label %loopexit.2.i
no_exit.2.i.preheader: ; preds = %no_exit.1.i
br label %no_exit.2.i
no_exit.2.i: ; preds = %no_exit.2.i, %no_exit.2.i.preheader
br bool false, label %no_exit.2.i, label %loopexit.2.i.loopexit
br i1 false, label %no_exit.2.i, label %loopexit.2.i.loopexit
loopexit.2.i.loopexit: ; preds = %no_exit.2.i
br label %loopexit.2.i
loopexit.2.i: ; preds = %loopexit.2.i.loopexit, %no_exit.1.i
br bool false, label %no_exit.1.i, label %loopexit.1.i.loopexit
br i1 false, label %no_exit.1.i, label %loopexit.1.i.loopexit
loopexit.1.i.loopexit: ; preds = %loopexit.2.i
br label %loopexit.1.i
loopexit.1.i: ; preds = %loopexit.1.i.loopexit, %no_exit.0.i
br bool false, label %no_exit.0.i, label %readvector.exit.loopexit
br i1 false, label %no_exit.0.i, label %readvector.exit.loopexit
readvector.exit.loopexit: ; preds = %loopexit.1.i
br label %readvector.exit
readvector.exit: ; preds = %readvector.exit.loopexit, %loopentry.0.i
br bool %tmp.143, label %loopentry.1.preheader.i, label %loopexit.0.i
br i1 %tmp.143, label %loopentry.1.preheader.i, label %loopexit.0.i
loopentry.1.preheader.i: ; preds = %readvector.exit
br label %loopentry.1.outer.i
loopentry.1.outer.i: ; preds = %loopexit.1.i110, %loopentry.1.preheader.i
br label %loopentry.1.i85
loopentry.1.i85.loopexit: ; preds = %hamming.exit16.i
br label %loopentry.1.i85
loopentry.1.i85: ; preds = %loopentry.1.i85.loopexit, %loopentry.1.outer.i
br bool false, label %no_exit.1.preheader.i, label %loopexit.1.i110.loopexit1
br i1 false, label %no_exit.1.preheader.i, label %loopexit.1.i110.loopexit1
no_exit.1.preheader.i: ; preds = %loopentry.1.i85
br label %no_exit.1.i87
no_exit.1.i87: ; preds = %then.1.i107, %no_exit.1.preheader.i
br bool false, label %no_exit.i.i101.preheader, label %hamming.exit.i104
br i1 false, label %no_exit.i.i101.preheader, label %hamming.exit.i104
no_exit.i.i101.preheader: ; preds = %no_exit.1.i87
br label %no_exit.i.i101
no_exit.i.i101: ; preds = %no_exit.i.i101, %no_exit.i.i101.preheader
br bool false, label %no_exit.i.i101, label %hamming.exit.i104.loopexit
br i1 false, label %no_exit.i.i101, label %hamming.exit.i104.loopexit
hamming.exit.i104.loopexit: ; preds = %no_exit.i.i101
br label %hamming.exit.i104
hamming.exit.i104: ; preds = %hamming.exit.i104.loopexit, %no_exit.1.i87
br bool false, label %no_exit.i15.i.preheader, label %hamming.exit16.i
br i1 false, label %no_exit.i15.i.preheader, label %hamming.exit16.i
no_exit.i15.i.preheader: ; preds = %hamming.exit.i104
br label %no_exit.i15.i
no_exit.i15.i: ; preds = %no_exit.i15.i, %no_exit.i15.i.preheader
br bool false, label %no_exit.i15.i, label %hamming.exit16.i.loopexit
br i1 false, label %no_exit.i15.i, label %hamming.exit16.i.loopexit
hamming.exit16.i.loopexit: ; preds = %no_exit.i15.i
br label %hamming.exit16.i
hamming.exit16.i: ; preds = %hamming.exit16.i.loopexit, %hamming.exit.i104
br bool false, label %loopentry.1.i85.loopexit, label %then.1.i107
br i1 false, label %loopentry.1.i85.loopexit, label %then.1.i107
then.1.i107: ; preds = %hamming.exit16.i
br bool false, label %no_exit.1.i87, label %loopexit.1.i110.loopexit
br i1 false, label %no_exit.1.i87, label %loopexit.1.i110.loopexit
loopexit.1.i110.loopexit: ; preds = %then.1.i107
br label %loopexit.1.i110
loopexit.1.i110.loopexit1: ; preds = %loopentry.1.i85
br label %loopexit.1.i110
loopexit.1.i110: ; preds = %loopexit.1.i110.loopexit1, %loopexit.1.i110.loopexit
br bool false, label %loopentry.1.outer.i, label %loopexit.0.i.loopexit
br i1 false, label %loopentry.1.outer.i, label %loopexit.0.i.loopexit
loopexit.0.i.loopexit: ; preds = %loopexit.1.i110
br label %loopexit.0.i
loopexit.0.i: ; preds = %loopexit.0.i.loopexit, %readvector.exit
br bool false, label %UnifiedReturnBlock.i113, label %then.2.i112
br i1 false, label %UnifiedReturnBlock.i113, label %then.2.i112
then.2.i112: ; preds = %loopexit.0.i
br label %checkham.exit
UnifiedReturnBlock.i113: ; preds = %loopexit.0.i
br label %checkham.exit
checkham.exit: ; preds = %UnifiedReturnBlock.i113, %then.2.i112
br bool false, label %loopentry.1.i14.preheader, label %loopentry.3.i.preheader
br i1 false, label %loopentry.1.i14.preheader, label %loopentry.3.i.preheader
loopentry.1.i14.preheader: ; preds = %checkham.exit
br label %loopentry.1.i14
loopentry.1.i14: ; preds = %loopexit.1.i18, %loopentry.1.i14.preheader
br bool false, label %no_exit.1.i16.preheader, label %loopexit.1.i18
br i1 false, label %no_exit.1.i16.preheader, label %loopexit.1.i18
no_exit.1.i16.preheader: ; preds = %loopentry.1.i14
br label %no_exit.1.i16
no_exit.1.i16: ; preds = %no_exit.1.i16, %no_exit.1.i16.preheader
br bool false, label %no_exit.1.i16, label %loopexit.1.i18.loopexit
br i1 false, label %no_exit.1.i16, label %loopexit.1.i18.loopexit
loopexit.1.i18.loopexit: ; preds = %no_exit.1.i16
br label %loopexit.1.i18
loopexit.1.i18: ; preds = %loopexit.1.i18.loopexit, %loopentry.1.i14
br bool false, label %loopentry.1.i14, label %loopentry.3.i.loopexit
br i1 false, label %loopentry.1.i14, label %loopentry.3.i.loopexit
loopentry.3.i.loopexit: ; preds = %loopexit.1.i18
br label %loopentry.3.i.preheader
loopentry.3.i.preheader: ; preds = %loopentry.3.i.loopexit, %checkham.exit
br label %loopentry.3.i
loopentry.3.i: ; preds = %endif.1.i, %loopentry.3.i.preheader
br bool false, label %loopentry.4.i.preheader, label %endif.1.i
br i1 false, label %loopentry.4.i.preheader, label %endif.1.i
loopentry.4.i.preheader: ; preds = %loopentry.3.i
br label %loopentry.4.i
loopentry.4.i: ; preds = %loopexit.4.i, %loopentry.4.i.preheader
br bool false, label %no_exit.4.i.preheader, label %loopexit.4.i
br i1 false, label %no_exit.4.i.preheader, label %loopexit.4.i
no_exit.4.i.preheader: ; preds = %loopentry.4.i
br label %no_exit.4.i
no_exit.4.i: ; preds = %no_exit.4.i.backedge, %no_exit.4.i.preheader
br bool false, label %endif.0.i, label %else.i
br i1 false, label %endif.0.i, label %else.i
else.i: ; preds = %no_exit.4.i
br bool false, label %no_exit.4.i.backedge, label %loopexit.4.i.loopexit
br i1 false, label %no_exit.4.i.backedge, label %loopexit.4.i.loopexit
no_exit.4.i.backedge: ; preds = %endif.0.i, %else.i
br label %no_exit.4.i
endif.0.i: ; preds = %no_exit.4.i
br bool false, label %no_exit.4.i.backedge, label %loopexit.4.i.loopexit
br i1 false, label %no_exit.4.i.backedge, label %loopexit.4.i.loopexit
loopexit.4.i.loopexit: ; preds = %endif.0.i, %else.i
br label %loopexit.4.i
loopexit.4.i: ; preds = %loopexit.4.i.loopexit, %loopentry.4.i
br bool false, label %loopentry.4.i, label %endif.1.i.loopexit
br i1 false, label %loopentry.4.i, label %endif.1.i.loopexit
endif.1.i.loopexit: ; preds = %loopexit.4.i
br label %endif.1.i
endif.1.i: ; preds = %endif.1.i.loopexit, %loopentry.3.i
%exitcond = seteq uint 0, 10 ; <bool> [#uses=1]
br bool %exitcond, label %generateT.exit, label %loopentry.3.i
%exitcond = icmp eq i32 0, 10 ; <i1> [#uses=1]
br i1 %exitcond, label %generateT.exit, label %loopentry.3.i
generateT.exit: ; preds = %endif.1.i
br bool false, label %then.0.i, label %loopentry.1.i30.preheader
br i1 false, label %then.0.i, label %loopentry.1.i30.preheader
then.0.i: ; preds = %generateT.exit
ret void
loopentry.1.i30.loopexit: ; preds = %loopexit.3.i
br label %loopentry.1.i30.backedge
loopentry.1.i30.preheader: ; preds = %generateT.exit
br label %loopentry.1.i30
loopentry.1.i30: ; preds = %loopentry.1.i30.backedge, %loopentry.1.i30.preheader
br bool %tmp.143, label %no_exit.0.i31.preheader, label %loopentry.1.i30.backedge
br i1 %tmp.143, label %no_exit.0.i31.preheader, label %loopentry.1.i30.backedge
loopentry.1.i30.backedge: ; preds = %loopentry.1.i30, %loopentry.1.i30.loopexit
br label %loopentry.1.i30
no_exit.0.i31.preheader: ; preds = %loopentry.1.i30
br label %no_exit.0.i31
no_exit.0.i31: ; preds = %loopexit.3.i, %no_exit.0.i31.preheader
br bool false, label %then.1.i, label %else.0.i
br i1 false, label %then.1.i, label %else.0.i
then.1.i: ; preds = %no_exit.0.i31
br bool undef, label %then.0.i29, label %loopentry.0.i31
br i1 undef, label %then.0.i29, label %loopentry.0.i31
then.0.i29: ; preds = %then.1.i
unreachable
loopentry.0.i31: ; preds = %then.1.i
br bool false, label %no_exit.0.i38.preheader, label %loopentry.1.i.preheader
br i1 false, label %no_exit.0.i38.preheader, label %loopentry.1.i.preheader
no_exit.0.i38.preheader: ; preds = %loopentry.0.i31
br label %no_exit.0.i38
no_exit.0.i38: ; preds = %no_exit.0.i38, %no_exit.0.i38.preheader
br bool undef, label %no_exit.0.i38, label %loopentry.1.i.preheader.loopexit
br i1 undef, label %no_exit.0.i38, label %loopentry.1.i.preheader.loopexit
loopentry.1.i.preheader.loopexit: ; preds = %no_exit.0.i38
br label %loopentry.1.i.preheader
loopentry.1.i.preheader: ; preds = %loopentry.1.i.preheader.loopexit, %loopentry.0.i31
br label %loopentry.1.i
loopentry.1.i: ; preds = %endif.2.i, %loopentry.1.i.preheader
br bool undef, label %loopentry.2.i39.preheader, label %loopexit.1.i79.loopexit2
br i1 undef, label %loopentry.2.i39.preheader, label %loopexit.1.i79.loopexit2
loopentry.2.i39.preheader: ; preds = %loopentry.1.i
br label %loopentry.2.i39
loopentry.2.i39: ; preds = %loopexit.5.i77, %loopentry.2.i39.preheader
br bool false, label %loopentry.3.i40.preheader, label %hamming.exit.i71
br i1 false, label %loopentry.3.i40.preheader, label %hamming.exit.i71
loopentry.3.i40.preheader: ; preds = %loopentry.2.i39
br label %loopentry.3.i40
loopentry.3.i40: ; preds = %loopexit.3.i51, %loopentry.3.i40.preheader
br bool false, label %no_exit.3.preheader.i42, label %loopexit.3.i51
br i1 false, label %no_exit.3.preheader.i42, label %loopexit.3.i51
no_exit.3.preheader.i42: ; preds = %loopentry.3.i40
br label %no_exit.3.i49
no_exit.3.i49: ; preds = %no_exit.3.i49, %no_exit.3.preheader.i42
br bool undef, label %no_exit.3.i49, label %loopexit.3.i51.loopexit
br i1 undef, label %no_exit.3.i49, label %loopexit.3.i51.loopexit
loopexit.3.i51.loopexit: ; preds = %no_exit.3.i49
br label %loopexit.3.i51
loopexit.3.i51: ; preds = %loopexit.3.i51.loopexit, %loopentry.3.i40
br bool undef, label %loopentry.3.i40, label %loopentry.4.i52
br i1 undef, label %loopentry.3.i40, label %loopentry.4.i52
loopentry.4.i52: ; preds = %loopexit.3.i51
br bool false, label %no_exit.4.i54.preheader, label %hamming.exit.i71
br i1 false, label %no_exit.4.i54.preheader, label %hamming.exit.i71
no_exit.4.i54.preheader: ; preds = %loopentry.4.i52
br label %no_exit.4.i54
no_exit.4.i54: ; preds = %no_exit.4.backedge.i, %no_exit.4.i54.preheader
br bool undef, label %then.1.i55, label %endif.1.i56
br i1 undef, label %then.1.i55, label %endif.1.i56
then.1.i55: ; preds = %no_exit.4.i54
br bool undef, label %no_exit.4.backedge.i, label %loopexit.4.i57
br i1 undef, label %no_exit.4.backedge.i, label %loopexit.4.i57
no_exit.4.backedge.i: ; preds = %endif.1.i56, %then.1.i55
br label %no_exit.4.i54
endif.1.i56: ; preds = %no_exit.4.i54
br bool undef, label %no_exit.4.backedge.i, label %loopexit.4.i57
br i1 undef, label %no_exit.4.backedge.i, label %loopexit.4.i57
loopexit.4.i57: ; preds = %endif.1.i56, %then.1.i55
br bool false, label %no_exit.i.i69.preheader, label %hamming.exit.i71
br i1 false, label %no_exit.i.i69.preheader, label %hamming.exit.i71
no_exit.i.i69.preheader: ; preds = %loopexit.4.i57
br label %no_exit.i.i69
no_exit.i.i69: ; preds = %no_exit.i.i69, %no_exit.i.i69.preheader
br bool undef, label %no_exit.i.i69, label %hamming.exit.i71.loopexit
br i1 undef, label %no_exit.i.i69, label %hamming.exit.i71.loopexit
hamming.exit.i71.loopexit: ; preds = %no_exit.i.i69
br label %hamming.exit.i71
hamming.exit.i71: ; preds = %hamming.exit.i71.loopexit, %loopexit.4.i57, %loopentry.4.i52, %loopentry.2.i39
br bool undef, label %endif.2.i, label %loopentry.5.i72
br i1 undef, label %endif.2.i, label %loopentry.5.i72
loopentry.5.i72: ; preds = %hamming.exit.i71
br bool false, label %shortcirc_next.i74.preheader, label %loopexit.5.i77
br i1 false, label %shortcirc_next.i74.preheader, label %loopexit.5.i77
shortcirc_next.i74.preheader: ; preds = %loopentry.5.i72
br label %shortcirc_next.i74
shortcirc_next.i74: ; preds = %no_exit.5.i76, %shortcirc_next.i74.preheader
br bool undef, label %no_exit.5.i76, label %loopexit.5.i77.loopexit
br i1 undef, label %no_exit.5.i76, label %loopexit.5.i77.loopexit
no_exit.5.i76: ; preds = %shortcirc_next.i74
br bool undef, label %shortcirc_next.i74, label %loopexit.5.i77.loopexit
br i1 undef, label %shortcirc_next.i74, label %loopexit.5.i77.loopexit
loopexit.5.i77.loopexit: ; preds = %no_exit.5.i76, %shortcirc_next.i74
br label %loopexit.5.i77
loopexit.5.i77: ; preds = %loopexit.5.i77.loopexit, %loopentry.5.i72
br bool undef, label %loopentry.2.i39, label %loopexit.1.i79.loopexit
br i1 undef, label %loopentry.2.i39, label %loopexit.1.i79.loopexit
endif.2.i: ; preds = %hamming.exit.i71
br label %loopentry.1.i
loopexit.1.i79.loopexit: ; preds = %loopexit.5.i77
br label %loopexit.1.i79
loopexit.1.i79.loopexit2: ; preds = %loopentry.1.i
br label %loopexit.1.i79
loopexit.1.i79: ; preds = %loopexit.1.i79.loopexit2, %loopexit.1.i79.loopexit
br bool undef, label %then.3.i, label %loopentry.6.i80
br i1 undef, label %then.3.i, label %loopentry.6.i80
then.3.i: ; preds = %loopexit.1.i79
br bool false, label %no_exit.6.i82.preheader, label %run.exit
br i1 false, label %no_exit.6.i82.preheader, label %run.exit
loopentry.6.i80: ; preds = %loopexit.1.i79
br bool false, label %no_exit.6.i82.preheader, label %run.exit
br i1 false, label %no_exit.6.i82.preheader, label %run.exit
no_exit.6.i82.preheader: ; preds = %loopentry.6.i80, %then.3.i
br label %no_exit.6.i82
no_exit.6.i82: ; preds = %no_exit.6.i82, %no_exit.6.i82.preheader
br bool undef, label %no_exit.6.i82, label %run.exit.loopexit
br i1 undef, label %no_exit.6.i82, label %run.exit.loopexit
run.exit.loopexit: ; preds = %no_exit.6.i82
br label %run.exit
run.exit: ; preds = %run.exit.loopexit, %loopentry.6.i80, %then.3.i
br bool false, label %no_exit.1.i36.preheader, label %loopentry.3.i37
br i1 false, label %no_exit.1.i36.preheader, label %loopentry.3.i37
else.0.i: ; preds = %no_exit.0.i31
br bool false, label %then.0.i4, label %loopentry.0.i6
br i1 false, label %then.0.i4, label %loopentry.0.i6
then.0.i4: ; preds = %else.0.i
unreachable
loopentry.0.i6: ; preds = %else.0.i
br bool false, label %no_exit.0.i8.preheader, label %loopentry.2.i.preheader
br i1 false, label %no_exit.0.i8.preheader, label %loopentry.2.i.preheader
no_exit.0.i8.preheader: ; preds = %loopentry.0.i6
br label %no_exit.0.i8
no_exit.0.i8: ; preds = %no_exit.0.i8, %no_exit.0.i8.preheader
br bool false, label %no_exit.0.i8, label %loopentry.2.i.preheader.loopexit
br i1 false, label %no_exit.0.i8, label %loopentry.2.i.preheader.loopexit
loopentry.2.i.preheader.loopexit: ; preds = %no_exit.0.i8
br label %loopentry.2.i.preheader
loopentry.2.i.preheader: ; preds = %loopentry.2.i.preheader.loopexit, %loopentry.0.i6
br label %loopentry.2.i
loopentry.2.i: ; preds = %endif.3.i19, %loopentry.2.i.preheader
br bool false, label %loopentry.3.i10.preheader, label %loopentry.4.i15
br i1 false, label %loopentry.3.i10.preheader, label %loopentry.4.i15
loopentry.3.i10.preheader: ; preds = %loopentry.2.i
br label %loopentry.3.i10
loopentry.3.i10: ; preds = %loopexit.3.i14, %loopentry.3.i10.preheader
br bool false, label %no_exit.3.preheader.i, label %loopexit.3.i14
br i1 false, label %no_exit.3.preheader.i, label %loopexit.3.i14
no_exit.3.preheader.i: ; preds = %loopentry.3.i10
br label %no_exit.3.i12
no_exit.3.i12: ; preds = %no_exit.3.i12, %no_exit.3.preheader.i
br bool false, label %no_exit.3.i12, label %loopexit.3.i14.loopexit
br i1 false, label %no_exit.3.i12, label %loopexit.3.i14.loopexit
loopexit.3.i14.loopexit: ; preds = %no_exit.3.i12
br label %loopexit.3.i14
loopexit.3.i14: ; preds = %loopexit.3.i14.loopexit, %loopentry.3.i10
br bool false, label %loopentry.3.i10, label %loopentry.4.i15.loopexit
br i1 false, label %loopentry.3.i10, label %loopentry.4.i15.loopexit
loopentry.4.i15.loopexit: ; preds = %loopexit.3.i14
br label %loopentry.4.i15
loopentry.4.i15: ; preds = %loopentry.4.i15.loopexit, %loopentry.2.i
br bool false, label %loopentry.5.outer.i.preheader, label %loopentry.7.i
br i1 false, label %loopentry.5.outer.i.preheader, label %loopentry.7.i
loopentry.5.outer.i.preheader: ; preds = %loopentry.4.i15
br label %loopentry.5.outer.i
loopentry.5.outer.i: ; preds = %loopexit.5.i, %loopentry.5.outer.i.preheader
br label %loopentry.5.i
loopentry.5.i: ; preds = %endif.1.i18, %loopentry.5.outer.i
br bool false, label %no_exit.5.i.preheader, label %loopexit.5.i.loopexit3
br i1 false, label %no_exit.5.i.preheader, label %loopexit.5.i.loopexit3
no_exit.5.i.preheader: ; preds = %loopentry.5.i
br label %no_exit.5.i
no_exit.5.i: ; preds = %then.2.i, %no_exit.5.i.preheader
br bool false, label %loopentry.6.i, label %endif.1.i18
br i1 false, label %loopentry.6.i, label %endif.1.i18
loopentry.6.i: ; preds = %no_exit.5.i
br bool false, label %no_exit.6.preheader.i, label %loopexit.6.i
br i1 false, label %no_exit.6.preheader.i, label %loopexit.6.i
no_exit.6.preheader.i: ; preds = %loopentry.6.i
br label %no_exit.6.i
no_exit.6.i: ; preds = %no_exit.6.i, %no_exit.6.preheader.i
br bool false, label %no_exit.6.i, label %loopexit.6.i.loopexit
br i1 false, label %no_exit.6.i, label %loopexit.6.i.loopexit
loopexit.6.i.loopexit: ; preds = %no_exit.6.i
br label %loopexit.6.i
loopexit.6.i: ; preds = %loopexit.6.i.loopexit, %loopentry.6.i
br bool false, label %then.2.i, label %endif.1.i18
br i1 false, label %then.2.i, label %endif.1.i18
then.2.i: ; preds = %loopexit.6.i
br bool false, label %no_exit.5.i, label %loopexit.5.i.loopexit
br i1 false, label %no_exit.5.i, label %loopexit.5.i.loopexit
endif.1.i18: ; preds = %loopexit.6.i, %no_exit.5.i
br label %loopentry.5.i
loopexit.5.i.loopexit: ; preds = %then.2.i
br label %loopexit.5.i
loopexit.5.i.loopexit3: ; preds = %loopentry.5.i
br label %loopexit.5.i
loopexit.5.i: ; preds = %loopexit.5.i.loopexit3, %loopexit.5.i.loopexit
br bool false, label %loopentry.5.outer.i, label %loopentry.7.i.loopexit
br i1 false, label %loopentry.5.outer.i, label %loopentry.7.i.loopexit
loopentry.7.i.loopexit: ; preds = %loopexit.5.i
br label %loopentry.7.i
loopentry.7.i: ; preds = %loopentry.7.i.loopexit, %loopentry.4.i15
br bool false, label %no_exit.7.i.preheader, label %hamming.exit.i
br i1 false, label %no_exit.7.i.preheader, label %hamming.exit.i
no_exit.7.i.preheader: ; preds = %loopentry.7.i
br label %no_exit.7.i
no_exit.7.i: ; preds = %no_exit.7.i, %no_exit.7.i.preheader
br bool false, label %no_exit.7.i, label %loopexit.7.i
br i1 false, label %no_exit.7.i, label %loopexit.7.i
loopexit.7.i: ; preds = %no_exit.7.i
br bool false, label %no_exit.i.i.preheader, label %hamming.exit.i
br i1 false, label %no_exit.i.i.preheader, label %hamming.exit.i
no_exit.i.i.preheader: ; preds = %loopexit.7.i
br label %no_exit.i.i
no_exit.i.i: ; preds = %no_exit.i.i, %no_exit.i.i.preheader
br bool false, label %no_exit.i.i, label %hamming.exit.i.loopexit
br i1 false, label %no_exit.i.i, label %hamming.exit.i.loopexit
hamming.exit.i.loopexit: ; preds = %no_exit.i.i
br label %hamming.exit.i
hamming.exit.i: ; preds = %hamming.exit.i.loopexit, %loopexit.7.i, %loopentry.7.i
br bool false, label %endif.3.i19, label %loopentry.8.i
br i1 false, label %endif.3.i19, label %loopentry.8.i
loopentry.8.i: ; preds = %hamming.exit.i
br bool false, label %shortcirc_next.i.preheader, label %loopexit.8.i
br i1 false, label %shortcirc_next.i.preheader, label %loopexit.8.i
shortcirc_next.i.preheader: ; preds = %loopentry.8.i
br label %shortcirc_next.i
shortcirc_next.i: ; preds = %no_exit.8.i, %shortcirc_next.i.preheader
br bool false, label %no_exit.8.i, label %loopexit.8.i.loopexit
br i1 false, label %no_exit.8.i, label %loopexit.8.i.loopexit
no_exit.8.i: ; preds = %shortcirc_next.i
br bool false, label %shortcirc_next.i, label %loopexit.8.i.loopexit
br i1 false, label %shortcirc_next.i, label %loopexit.8.i.loopexit
loopexit.8.i.loopexit: ; preds = %no_exit.8.i, %shortcirc_next.i
br label %loopexit.8.i
loopexit.8.i: ; preds = %loopexit.8.i.loopexit, %loopentry.8.i
br bool false, label %no_exit.9.i.preheader, label %endif.3.i19
br i1 false, label %no_exit.9.i.preheader, label %endif.3.i19
no_exit.9.i.preheader: ; preds = %loopexit.8.i
br label %no_exit.9.i
no_exit.9.i: ; preds = %no_exit.9.i, %no_exit.9.i.preheader
br bool false, label %no_exit.9.i, label %endif.3.i19.loopexit
br i1 false, label %no_exit.9.i, label %endif.3.i19.loopexit
endif.3.i19.loopexit: ; preds = %no_exit.9.i
br label %endif.3.i19
endif.3.i19: ; preds = %endif.3.i19.loopexit, %loopexit.8.i, %hamming.exit.i
br bool false, label %loopentry.2.i, label %loopexit.1.i20
br i1 false, label %loopentry.2.i, label %loopexit.1.i20
loopexit.1.i20: ; preds = %endif.3.i19
br bool false, label %then.4.i, label %UnifiedReturnBlock.i
br i1 false, label %then.4.i, label %UnifiedReturnBlock.i
then.4.i: ; preds = %loopexit.1.i20
br label %runcont.exit
UnifiedReturnBlock.i: ; preds = %loopexit.1.i20
br label %runcont.exit
runcont.exit: ; preds = %UnifiedReturnBlock.i, %then.4.i
br bool false, label %no_exit.1.i36.preheader, label %loopentry.3.i37
br i1 false, label %no_exit.1.i36.preheader, label %loopentry.3.i37
no_exit.1.i36.preheader: ; preds = %runcont.exit, %run.exit
br label %no_exit.1.i36
no_exit.1.i36: ; preds = %no_exit.1.i36, %no_exit.1.i36.preheader
br bool false, label %no_exit.1.i36, label %loopentry.3.i37.loopexit
br i1 false, label %no_exit.1.i36, label %loopentry.3.i37.loopexit
loopentry.3.i37.loopexit: ; preds = %no_exit.1.i36
br label %loopentry.3.i37
loopentry.3.i37: ; preds = %loopentry.3.i37.loopexit, %runcont.exit, %run.exit
br bool false, label %loopentry.4.i38.preheader, label %loopexit.3.i
br i1 false, label %loopentry.4.i38.preheader, label %loopexit.3.i
loopentry.4.i38.preheader: ; preds = %loopentry.3.i37
br label %loopentry.4.i38
loopentry.4.i38: ; preds = %loopexit.4.i42, %loopentry.4.i38.preheader
br bool false, label %no_exit.3.i.preheader, label %loopexit.4.i42
br i1 false, label %no_exit.3.i.preheader, label %loopexit.4.i42
no_exit.3.i.preheader: ; preds = %loopentry.4.i38
br label %no_exit.3.i
no_exit.3.i: ; preds = %no_exit.3.i.backedge, %no_exit.3.i.preheader
br bool false, label %endif.3.i, label %else.1.i
br i1 false, label %endif.3.i, label %else.1.i
else.1.i: ; preds = %no_exit.3.i
br bool false, label %no_exit.3.i.backedge, label %loopexit.4.i42.loopexit
br i1 false, label %no_exit.3.i.backedge, label %loopexit.4.i42.loopexit
no_exit.3.i.backedge: ; preds = %endif.3.i, %else.1.i
br label %no_exit.3.i
endif.3.i: ; preds = %no_exit.3.i
br bool false, label %no_exit.3.i.backedge, label %loopexit.4.i42.loopexit
br i1 false, label %no_exit.3.i.backedge, label %loopexit.4.i42.loopexit
loopexit.4.i42.loopexit: ; preds = %endif.3.i, %else.1.i
br label %loopexit.4.i42
loopexit.4.i42: ; preds = %loopexit.4.i42.loopexit, %loopentry.4.i38
br bool false, label %loopentry.4.i38, label %loopexit.3.i.loopexit
br i1 false, label %loopentry.4.i38, label %loopexit.3.i.loopexit
loopexit.3.i.loopexit: ; preds = %loopexit.4.i42
br label %loopexit.3.i
loopexit.3.i: ; preds = %loopexit.3.i.loopexit, %loopentry.3.i37
%tmp.13.i155 = setlt int 0, 0 ; <bool> [#uses=1]
br bool %tmp.13.i155, label %no_exit.0.i31, label %loopentry.1.i30.loopexit
%tmp.13.i155 = icmp slt i32 0, 0 ; <i1> [#uses=1]
br i1 %tmp.13.i155, label %no_exit.0.i31, label %loopentry.1.i30.loopexit
}

View File

@ -1,104 +1,98 @@
; RUN: llvm-upgrade < %s | llvm-as | opt -load-vn -gcse -simplifycfg \
; RUN: llvm-as < %s | opt -load-vn -gcse -simplifycfg \
; RUN: -disable-output
; PR867
; END.
target endian = big
target pointersize = 32
target datalayout = "E-p:32:32"
target triple = "powerpc-apple-darwin8"
%struct.CUMULATIVE_ARGS = type { int, int, int, int, int, int, int, int, int, int, int, int }
%struct.CUMULATIVE_ARGS = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 }
%struct.eh_status = type opaque
%struct.emit_status = type { int, int, %struct.rtx_def*, %struct.rtx_def*, %struct.sequence_stack*, int, %struct.location_t, int, ubyte*, %struct.rtx_def** }
%struct.expr_status = type { int, int, int, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def* }
%struct.function = type { %struct.eh_status*, %struct.expr_status*, %struct.emit_status*, %struct.varasm_status*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.function*, int, int, int, int, %struct.rtx_def*, %struct.CUMULATIVE_ARGS, %struct.rtx_def*, %struct.rtx_def*, %struct.initial_value_struct*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, ubyte, int, long, %struct.tree_node*, %struct.tree_node*, %struct.rtx_def*, %struct.varray_head_tag*, %struct.temp_slot*, int, %struct.var_refs_queue*, int, int, %struct.rtvec_def*, %struct.tree_node*, int, int, int, %struct.machine_function*, uint, uint, ubyte, ubyte, %struct.language_function*, %struct.rtx_def*, uint, int, int, int, %struct.location_t, %struct.varray_head_tag*, %struct.tree_node*, ubyte, ubyte, ubyte }
%struct.emit_status = type { i32, i32, %struct.rtx_def*, %struct.rtx_def*, %struct.sequence_stack*, i32, %struct.location_t, i32, i8*, %struct.rtx_def** }
%struct.expr_status = type { i32, i32, i32, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def* }
%struct.function = type { %struct.eh_status*, %struct.expr_status*, %struct.emit_status*, %struct.varasm_status*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.function*, i32, i32, i32, i32, %struct.rtx_def*, %struct.CUMULATIVE_ARGS, %struct.rtx_def*, %struct.rtx_def*, %struct.initial_value_struct*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, %struct.rtx_def*, i8, i32, i64, %struct.tree_node*, %struct.tree_node*, %struct.rtx_def*, %struct.varray_head_tag*, %struct.temp_slot*, i32, %struct.var_refs_queue*, i32, i32, %struct.rtvec_def*, %struct.tree_node*, i32, i32, i32, %struct.machine_function*, i32, i32, i8, i8, %struct.language_function*, %struct.rtx_def*, i32, i32, i32, i32, %struct.location_t, %struct.varray_head_tag*, %struct.tree_node*, i8, i8, i8 }
%struct.initial_value_struct = type opaque
%struct.lang_decl = type opaque
%struct.lang_type = type opaque
%struct.language_function = type opaque
%struct.location_t = type { sbyte*, int }
%struct.machine_function = type { int, uint, sbyte*, int, int }
%struct.rtunion = type { int }
%struct.rtvec_def = type { int, [1 x %struct.rtx_def*] }
%struct.rtx_def = type { ushort, ubyte, ubyte, %struct.u }
%struct.location_t = type { i8*, i32 }
%struct.machine_function = type { i32, i32, i8*, i32, i32 }
%struct.rtunion = type { i32 }
%struct.rtvec_def = type { i32, [1 x %struct.rtx_def*] }
%struct.rtx_def = type { i16, i8, i8, %struct.u }
%struct.sequence_stack = type { %struct.rtx_def*, %struct.rtx_def*, %struct.sequence_stack* }
%struct.temp_slot = type opaque
%struct.tree_common = type { %struct.tree_node*, %struct.tree_node*, %union.tree_ann_d*, ubyte, ubyte, ubyte, ubyte, ubyte }
%struct.tree_decl = type { %struct.tree_common, %struct.location_t, uint, %struct.tree_node*, ubyte, ubyte, ubyte, ubyte, ubyte, ubyte, ubyte, ubyte, uint, %struct.tree_decl_u1, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.rtx_def*, %struct.tree_decl_u2, %struct.tree_node*, %struct.tree_node*, long, %struct.lang_decl* }
%struct.tree_decl_u1 = type { long }
%struct.tree_common = type { %struct.tree_node*, %struct.tree_node*, %union.tree_ann_d*, i8, i8, i8, i8, i8 }
%struct.tree_decl = type { %struct.tree_common, %struct.location_t, i32, %struct.tree_node*, i8, i8, i8, i8, i8, i8, i8, i8, i32, %struct.tree_decl_u1, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.rtx_def*, %struct.tree_decl_u2, %struct.tree_node*, %struct.tree_node*, i64, %struct.lang_decl* }
%struct.tree_decl_u1 = type { i64 }
%struct.tree_decl_u2 = type { %struct.function* }
%struct.tree_node = type { %struct.tree_decl }
%struct.tree_type = type { %struct.tree_common, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, uint, ushort, ubyte, ubyte, uint, %struct.tree_node*, %struct.tree_node*, %struct.rtunion, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, long, %struct.lang_type* }
%struct.u = type { [1 x long] }
%struct.var_refs_queue = type { %struct.rtx_def*, uint, int, %struct.var_refs_queue* }
%struct.tree_type = type { %struct.tree_common, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, i32, i16, i8, i8, i32, %struct.tree_node*, %struct.tree_node*, %struct.rtunion, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, %struct.tree_node*, i64, %struct.lang_type* }
%struct.u = type { [1 x i64] }
%struct.var_refs_queue = type { %struct.rtx_def*, i32, i32, %struct.var_refs_queue* }
%struct.varasm_status = type opaque
%struct.varray_head_tag = type { uint, uint, uint, sbyte*, %struct.u }
%struct.varray_head_tag = type { i32, i32, i32, i8*, %struct.u }
%union.tree_ann_d = type opaque
%mode_class = external global [35 x ubyte] ; <[35 x ubyte]*> [#uses=3]
@mode_class = external global [35 x i8] ; <[35 x i8]*> [#uses=3]
implementation ; Functions:
void %fold_builtin_classify() {
define void @fold_builtin_classify() {
entry:
%tmp63 = load int* null ; <int> [#uses=1]
switch int %tmp63, label %bb276 [
int 414, label %bb145
int 417, label %bb
%tmp63 = load i32* null ; <i32> [#uses=1]
switch i32 %tmp63, label %bb276 [
i32 414, label %bb145
i32 417, label %bb
]
bb: ; preds = %entry
ret void
bb145: ; preds = %entry
%tmp146 = load %struct.tree_node** null ; <%struct.tree_node*> [#uses=1]
%tmp148 = getelementptr %struct.tree_node* %tmp146, int 0, uint 0, uint 0, uint 1 ; <%struct.tree_node**> [#uses=1]
%tmp148 = getelementptr %struct.tree_node* %tmp146, i32 0, i32 0, i32 0, i32 1 ; <%struct.tree_node**> [#uses=1]
%tmp149 = load %struct.tree_node** %tmp148 ; <%struct.tree_node*> [#uses=1]
%tmp150 = cast %struct.tree_node* %tmp149 to %struct.tree_type* ; <%struct.tree_type*> [#uses=1]
%tmp151 = getelementptr %struct.tree_type* %tmp150, int 0, uint 6 ; <ushort*> [#uses=1]
%tmp151 = cast ushort* %tmp151 to uint* ; <uint*> [#uses=1]
%tmp152 = load uint* %tmp151 ; <uint> [#uses=1]
%tmp154 = shr uint %tmp152, ubyte 16 ; <uint> [#uses=1]
%tmp154.mask = and uint %tmp154, 127 ; <uint> [#uses=1]
%tmp155 = getelementptr [35 x ubyte]* %mode_class, int 0, uint %tmp154.mask ; <ubyte*> [#uses=1]
%tmp156 = load ubyte* %tmp155 ; <ubyte> [#uses=1]
%tmp157 = seteq ubyte %tmp156, 4 ; <bool> [#uses=1]
br bool %tmp157, label %cond_next241, label %cond_true158
%tmp150 = bitcast %struct.tree_node* %tmp149 to %struct.tree_type* ; <%struct.tree_type*> [#uses=1]
%tmp151 = getelementptr %struct.tree_type* %tmp150, i32 0, i32 6 ; <i16*> [#uses=1]
%tmp151.upgrd.1 = bitcast i16* %tmp151 to i32* ; <i32*> [#uses=1]
%tmp152 = load i32* %tmp151.upgrd.1 ; <i32> [#uses=1]
%tmp154 = lshr i32 %tmp152, 16 ; <i32> [#uses=1]
%tmp154.mask = and i32 %tmp154, 127 ; <i32> [#uses=1]
%gep.upgrd.2 = zext i32 %tmp154.mask to i64 ; <i64> [#uses=1]
%tmp155 = getelementptr [35 x i8]* @mode_class, i32 0, i64 %gep.upgrd.2 ; <i8*> [#uses=1]
%tmp156 = load i8* %tmp155 ; <i8> [#uses=1]
%tmp157 = icmp eq i8 %tmp156, 4 ; <i1> [#uses=1]
br i1 %tmp157, label %cond_next241, label %cond_true158
cond_true158: ; preds = %bb145
%tmp172 = load %struct.tree_node** null ; <%struct.tree_node*> [#uses=1]
%tmp174 = getelementptr %struct.tree_node* %tmp172, int 0, uint 0, uint 0, uint 1 ; <%struct.tree_node**> [#uses=1]
%tmp174 = getelementptr %struct.tree_node* %tmp172, i32 0, i32 0, i32 0, i32 1 ; <%struct.tree_node**> [#uses=1]
%tmp175 = load %struct.tree_node** %tmp174 ; <%struct.tree_node*> [#uses=1]
%tmp176 = cast %struct.tree_node* %tmp175 to %struct.tree_type* ; <%struct.tree_type*> [#uses=1]
%tmp177 = getelementptr %struct.tree_type* %tmp176, int 0, uint 6 ; <ushort*> [#uses=1]
%tmp177 = cast ushort* %tmp177 to uint* ; <uint*> [#uses=1]
%tmp178 = load uint* %tmp177 ; <uint> [#uses=1]
%tmp180 = shr uint %tmp178, ubyte 16 ; <uint> [#uses=1]
%tmp180.mask = and uint %tmp180, 127 ; <uint> [#uses=1]
%tmp181 = getelementptr [35 x ubyte]* %mode_class, int 0, uint %tmp180.mask ; <ubyte*> [#uses=1]
%tmp182 = load ubyte* %tmp181 ; <ubyte> [#uses=1]
%tmp183 = seteq ubyte %tmp182, 8 ; <bool> [#uses=1]
br bool %tmp183, label %cond_next241, label %cond_true184
%tmp176 = bitcast %struct.tree_node* %tmp175 to %struct.tree_type* ; <%struct.tree_type*> [#uses=1]
%tmp177 = getelementptr %struct.tree_type* %tmp176, i32 0, i32 6 ; <i16*> [#uses=1]
%tmp177.upgrd.3 = bitcast i16* %tmp177 to i32* ; <i32*> [#uses=1]
%tmp178 = load i32* %tmp177.upgrd.3 ; <i32> [#uses=1]
%tmp180 = lshr i32 %tmp178, 16 ; <i32> [#uses=1]
%tmp180.mask = and i32 %tmp180, 127 ; <i32> [#uses=1]
%gep.upgrd.4 = zext i32 %tmp180.mask to i64 ; <i64> [#uses=1]
%tmp181 = getelementptr [35 x i8]* @mode_class, i32 0, i64 %gep.upgrd.4 ; <i8*> [#uses=1]
%tmp182 = load i8* %tmp181 ; <i8> [#uses=1]
%tmp183 = icmp eq i8 %tmp182, 8 ; <i1> [#uses=1]
br i1 %tmp183, label %cond_next241, label %cond_true184
cond_true184: ; preds = %cond_true158
%tmp185 = load %struct.tree_node** null ; <%struct.tree_node*> [#uses=1]
%tmp187 = getelementptr %struct.tree_node* %tmp185, int 0, uint 0, uint 0, uint 1 ; <%struct.tree_node**> [#uses=1]
%tmp187 = getelementptr %struct.tree_node* %tmp185, i32 0, i32 0, i32 0, i32 1 ; <%struct.tree_node**> [#uses=1]
%tmp188 = load %struct.tree_node** %tmp187 ; <%struct.tree_node*> [#uses=1]
%tmp189 = cast %struct.tree_node* %tmp188 to %struct.tree_type* ; <%struct.tree_type*> [#uses=1]
%tmp190 = getelementptr %struct.tree_type* %tmp189, int 0, uint 6 ; <ushort*> [#uses=1]
%tmp190 = cast ushort* %tmp190 to uint* ; <uint*> [#uses=1]
%tmp191 = load uint* %tmp190 ; <uint> [#uses=1]
%tmp193 = shr uint %tmp191, ubyte 16 ; <uint> [#uses=1]
%tmp193.mask = and uint %tmp193, 127 ; <uint> [#uses=1]
%tmp194 = getelementptr [35 x ubyte]* %mode_class, int 0, uint %tmp193.mask ; <ubyte*> [#uses=1]
%tmp195 = load ubyte* %tmp194 ; <ubyte> [#uses=1]
%tmp196 = seteq ubyte %tmp195, 4 ; <bool> [#uses=1]
br bool %tmp196, label %cond_next241, label %cond_true197
%tmp189 = bitcast %struct.tree_node* %tmp188 to %struct.tree_type* ; <%struct.tree_type*> [#uses=1]
%tmp190 = getelementptr %struct.tree_type* %tmp189, i32 0, i32 6 ; <i16*> [#uses=1]
%tmp190.upgrd.5 = bitcast i16* %tmp190 to i32* ; <i32*> [#uses=1]
%tmp191 = load i32* %tmp190.upgrd.5 ; <i32> [#uses=1]
%tmp193 = lshr i32 %tmp191, 16 ; <i32> [#uses=1]
%tmp193.mask = and i32 %tmp193, 127 ; <i32> [#uses=1]
%gep.upgrd.6 = zext i32 %tmp193.mask to i64 ; <i64> [#uses=1]
%tmp194 = getelementptr [35 x i8]* @mode_class, i32 0, i64 %gep.upgrd.6 ; <i8*> [#uses=1]
%tmp195 = load i8* %tmp194 ; <i8> [#uses=1]
%tmp196 = icmp eq i8 %tmp195, 4 ; <i1> [#uses=1]
br i1 %tmp196, label %cond_next241, label %cond_true197
cond_true197: ; preds = %cond_true184
ret void
cond_next241: ; preds = %cond_true184, %cond_true158, %bb145
%tmp245 = load uint* null ; <uint> [#uses=0]
%tmp245 = load i32* null ; <i32> [#uses=0]
ret void
bb276: ; preds = %entry
ret void
}

View File

@ -1,34 +1,26 @@
; PR957
; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg | llvm-dis | \
; RUN: llvm-as < %s | opt -simplifycfg | llvm-dis | \
; RUN: not grep select
uint %test(uint %tmp) {
cond_false179: ; preds = %cond_true
%tmp181 = seteq uint %tmp, 0 ; <bool> [#uses=1]
br bool %tmp181, label %cond_true182, label %cond_next185
cond_true182: ; preds = %cond_false179
br label %cond_next185
cond_next185: ; preds = %cond_true182, %cond_false179
%d0.3 = phi uint [ div (uint 1, uint 0), %cond_true182 ], [ %tmp,
%cond_false179 ] ; <uint> [#uses=7]
ret uint %d0.3
define i32 @test(i32 %tmp) {
cond_false179:
%tmp181 = icmp eq i32 %tmp, 0 ; <i1> [#uses=1]
br i1 %tmp181, label %cond_true182, label %cond_next185
cond_true182: ; preds = %cond_false179
br label %cond_next185
cond_next185: ; preds = %cond_true182, %cond_false179
%d0.3 = phi i32 [ udiv (i32 1, i32 0), %cond_true182 ], [ %tmp, %cond_false179 ] ; <i32> [#uses=1]
ret i32 %d0.3
}
uint %test2(uint %tmp) {
cond_false179: ; preds = %cond_true
%tmp181 = seteq uint %tmp, 0 ; <bool> [#uses=1]
br bool %tmp181, label %cond_true182, label %cond_next185
cond_true182: ; preds = %cond_false179
br label %cond_next185
cond_next185: ; preds = %cond_true182, %cond_false179
%d0.3 = phi uint [ div (uint 1, uint 0), %cond_true182 ], [ %tmp,
%cond_false179 ] ; <uint> [#uses=7]
call uint %test(uint 4)
ret uint %d0.3
define i32 @test2(i32 %tmp) {
cond_false179:
%tmp181 = icmp eq i32 %tmp, 0 ; <i1> [#uses=1]
br i1 %tmp181, label %cond_true182, label %cond_next185
cond_true182: ; preds = %cond_false179
br label %cond_next185
cond_next185: ; preds = %cond_true182, %cond_false179
%d0.3 = phi i32 [ udiv (i32 1, i32 0), %cond_true182 ], [ %tmp, %cond_false179 ] ; <i32> [#uses=1]
call i32 @test( i32 4 ) ; <i32>:0 [#uses=0]
ret i32 %d0.3
}

View File

@ -1,60 +1,58 @@
; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg -disable-output
; RUN: llvm-as < %s | opt -simplifycfg -disable-output
; END.
%struct..4._102 = type { %struct.QVectorData* }
%struct..5._125 = type { %struct.QMapData* }
%struct.QAbstractTextDocumentLayout = type { %struct.QObject }
%struct.QBasicAtomic = type { int }
%struct.QFont = type { %struct.QFontPrivate*, uint }
%struct.QBasicAtomic = type { i32 }
%struct.QFont = type { %struct.QFontPrivate*, i32 }
%struct.QFontMetrics = type { %struct.QFontPrivate* }
%struct.QFontPrivate = type opaque
"struct.QFragmentMap<QTextBlockData>" = type { %struct.QFragmentMapData }
%struct.QFragmentMapData = type { "struct.QFragmentMapData::._154", int }
"struct.QFragmentMapData::._154" = type { "struct.QFragmentMapData::Header"* }
"struct.QFragmentMapData::Header" = type { uint, uint, uint, uint, uint, uint, uint, uint }
"struct.QHash<uint,QHashDummyValue>" = type { "struct.QHash<uint,QHashDummyValue>::._152" }
"struct.QHash<uint,QHashDummyValue>::._152" = type { %struct.QHashData* }
%struct.QHashData = type { "struct.QHashData::Node"*, "struct.QHashData::Node"**, %struct.QBasicAtomic, int, int, short, short, int, ubyte }
"struct.QHashData::Node" = type { "struct.QHashData::Node"*, uint }
"struct.QList<QObject*>::._92" = type { %struct.QListData }
"struct.QList<QPointer<QObject> >" = type { "struct.QList<QObject*>::._92" }
%struct.QListData = type { "struct.QListData::Data"* }
"struct.QListData::Data" = type { %struct.QBasicAtomic, int, int, int, ubyte, [1 x sbyte*] }
"struct.QMap<QUrl,QVariant>" = type { %struct..5._125 }
%struct.QMapData = type { "struct.QMapData::Node"*, [12 x "struct.QMapData::Node"*], %struct.QBasicAtomic, int, int, uint, ubyte }
"struct.QMapData::Node" = type { "struct.QMapData::Node"*, [1 x "struct.QMapData::Node"*] }
%struct.QObject = type { int (...)**, %struct.QObjectData* }
%struct.QObjectData = type { int (...)**, %struct.QObject*, %struct.QObject*, "struct.QList<QPointer<QObject> >", ubyte, [3 x ubyte], int, int }
%struct.QObjectPrivate = type { %struct.QObjectData, int, %struct.QObject*, "struct.QList<QPointer<QObject> >", "struct.QVector<QAbstractTextDocumentLayout::Selection>", %struct.QString }
%struct.QPaintDevice = type { int (...)**, ushort }
%"struct.QFragmentMap<QTextBlockData>" = type { %struct.QFragmentMapData }
%struct.QFragmentMapData = type { %"struct.QFragmentMapData::._154", i32 }
%"struct.QFragmentMapData::._154" = type { %"struct.QFragmentMapData::Header"* }
%"struct.QFragmentMapData::Header" = type { i32, i32, i32, i32, i32, i32, i32, i32 }
%"struct.QHash<uint,QHashDummyValue>" = type { %"struct.QHash<uint,QHashDummyValue>::._152" }
%"struct.QHash<uint,QHashDummyValue>::._152" = type { %struct.QHashData* }
%struct.QHashData = type { %"struct.QHashData::Node"*, %"struct.QHashData::Node"**, %struct.QBasicAtomic, i32, i32, i16, i16, i32, i8 }
%"struct.QHashData::Node" = type { %"struct.QHashData::Node"*, i32 }
%"struct.QList<QObject*>::._92" = type { %struct.QListData }
%"struct.QList<QPointer<QObject> >" = type { %"struct.QList<QObject*>::._92" }
%struct.QListData = type { %"struct.QListData::Data"* }
%"struct.QListData::Data" = type { %struct.QBasicAtomic, i32, i32, i32, i8, [1 x i8*] }
%"struct.QMap<QUrl,QVariant>" = type { %struct..5._125 }
%struct.QMapData = type { %"struct.QMapData::Node"*, [12 x %"struct.QMapData::Node"*], %struct.QBasicAtomic, i32, i32, i32, i8 }
%"struct.QMapData::Node" = type { %"struct.QMapData::Node"*, [1 x %"struct.QMapData::Node"*] }
%struct.QObject = type { i32 (...)**, %struct.QObjectData* }
%struct.QObjectData = type { i32 (...)**, %struct.QObject*, %struct.QObject*, %"struct.QList<QPointer<QObject> >", i8, [3 x i8], i32, i32 }
%struct.QObjectPrivate = type { %struct.QObjectData, i32, %struct.QObject*, %"struct.QList<QPointer<QObject> >", %"struct.QVector<QAbstractTextDocumentLayout::Selection>", %struct.QString }
%struct.QPaintDevice = type { i32 (...)**, i16 }
%struct.QPainter = type { %struct.QPainterPrivate* }
%struct.QPainterPrivate = type opaque
%struct.QPointF = type { double, double }
%struct.QPrinter = type { %struct.QPaintDevice, %struct.QPrinterPrivate* }
%struct.QPrinterPrivate = type opaque
%struct.QRectF = type { double, double, double, double }
"struct.QSet<uint>" = type { "struct.QHash<uint,QHashDummyValue>" }
"struct.QSharedDataPointer<QTextFormatPrivate>" = type { %struct.QTextFormatPrivate* }
%struct.QString = type { "struct.QString::Data"* }
"struct.QString::Data" = type { %struct.QBasicAtomic, int, int, ushort*, ubyte, ubyte, [1 x ushort] }
%"struct.QSet<uint>" = type { %"struct.QHash<uint,QHashDummyValue>" }
%"struct.QSharedDataPointer<QTextFormatPrivate>" = type { %struct.QTextFormatPrivate* }
%struct.QString = type { %"struct.QString::Data"* }
%"struct.QString::Data" = type { %struct.QBasicAtomic, i32, i32, i16*, i8, i8, [1 x i16] }
%struct.QTextBlockFormat = type { %struct.QTextFormat }
%struct.QTextBlockGroup = type { %struct.QAbstractTextDocumentLayout }
%struct.QTextDocumentConfig = type { %struct.QString }
%struct.QTextDocumentPrivate = type { %struct.QObjectPrivate, %struct.QString, "struct.QVector<QAbstractTextDocumentLayout::Selection>", bool, int, int, bool, int, int, int, int, bool, %struct.QTextFormatCollection, %struct.QTextBlockGroup*, %struct.QAbstractTextDocumentLayout*, "struct.QFragmentMap<QTextBlockData>", "struct.QFragmentMap<QTextBlockData>", int, "struct.QList<QPointer<QObject> >", "struct.QList<QPointer<QObject> >", "struct.QMap<QUrl,QVariant>", "struct.QMap<QUrl,QVariant>", "struct.QMap<QUrl,QVariant>", %struct.QTextDocumentConfig, bool, bool, %struct.QPointF }
%struct.QTextFormat = type { "struct.QSharedDataPointer<QTextFormatPrivate>", int }
%struct.QTextFormatCollection = type { "struct.QVector<QAbstractTextDocumentLayout::Selection>", "struct.QVector<QAbstractTextDocumentLayout::Selection>", "struct.QSet<uint>", %struct.QFont }
%struct.QTextDocumentPrivate = type { %struct.QObjectPrivate, %struct.QString, %"struct.QVector<QAbstractTextDocumentLayout::Selection>", i1, i32, i32, i1, i32, i32, i32, i32, i1, %struct.QTextFormatCollection, %struct.QTextBlockGroup*, %struct.QAbstractTextDocumentLayout*, %"struct.QFragmentMap<QTextBlockData>", %"struct.QFragmentMap<QTextBlockData>", i32, %"struct.QList<QPointer<QObject> >", %"struct.QList<QPointer<QObject> >", %"struct.QMap<QUrl,QVariant>", %"struct.QMap<QUrl,QVariant>", %"struct.QMap<QUrl,QVariant>", %struct.QTextDocumentConfig, i1, i1, %struct.QPointF }
%struct.QTextFormat = type { %"struct.QSharedDataPointer<QTextFormatPrivate>", i32 }
%struct.QTextFormatCollection = type { %"struct.QVector<QAbstractTextDocumentLayout::Selection>", %"struct.QVector<QAbstractTextDocumentLayout::Selection>", %"struct.QSet<uint>", %struct.QFont }
%struct.QTextFormatPrivate = type opaque
"struct.QVector<QAbstractTextDocumentLayout::Selection>" = type { %struct..4._102 }
%struct.QVectorData = type { %struct.QBasicAtomic, int, int, ubyte }
%"struct.QVector<QAbstractTextDocumentLayout::Selection>" = type { %struct..4._102 }
%struct.QVectorData = type { %struct.QBasicAtomic, i32, i32, i8 }
implementation ; Functions:
void %_ZNK13QTextDocument5printEP8QPrinter(%struct.QAbstractTextDocumentLayout* %this, %struct.QPrinter* %printer) {
define void @_ZNK13QTextDocument5printEP8QPrinter(%struct.QAbstractTextDocumentLayout* %this, %struct.QPrinter* %printer) {
entry:
%tmp = alloca %struct.QPointF, align 16 ; <%struct.QPointF*> [#uses=2]
%tmp = alloca %struct.QRectF, align 16 ; <%struct.QRectF*> [#uses=5]
%tmp.upgrd.1 = alloca %struct.QRectF, align 16 ; <%struct.QRectF*> [#uses=5]
%tmp2 = alloca %struct.QPointF, align 16 ; <%struct.QPointF*> [#uses=3]
%tmp = alloca %struct.QFontMetrics, align 16 ; <%struct.QFontMetrics*> [#uses=4]
%tmp = alloca %struct.QFont, align 16 ; <%struct.QFont*> [#uses=4]
%tmp.upgrd.2 = alloca %struct.QFontMetrics, align 16 ; <%struct.QFontMetrics*> [#uses=4]
%tmp.upgrd.3 = alloca %struct.QFont, align 16 ; <%struct.QFont*> [#uses=4]
%tmp3 = alloca %struct.QPointF, align 16 ; <%struct.QPointF*> [#uses=2]
%p = alloca %struct.QPainter, align 16 ; <%struct.QPainter*> [#uses=14]
%body = alloca %struct.QRectF, align 16 ; <%struct.QRectF*> [#uses=9]
@ -63,590 +61,495 @@ entry:
%printerPageSize = alloca %struct.QPointF, align 16 ; <%struct.QPointF*> [#uses=3]
%fmt = alloca %struct.QTextBlockFormat, align 16 ; <%struct.QTextBlockFormat*> [#uses=5]
%font = alloca %struct.QFont, align 16 ; <%struct.QFont*> [#uses=5]
%tmp = call %struct.QTextDocumentPrivate* %_ZNK13QTextDocument6d_funcEv( %struct.QAbstractTextDocumentLayout* %this ) ; <%struct.QTextDocumentPrivate*> [#uses=5]
%tmp = getelementptr %struct.QPrinter* %printer, int 0, uint 0 ; <%struct.QPaintDevice*> [#uses=1]
call void %_ZN8QPainterC1EP12QPaintDevice( %struct.QPainter* %p, %struct.QPaintDevice* %tmp )
%tmp = invoke bool %_ZNK8QPainter8isActiveEv( %struct.QPainter* %p )
to label %invcont unwind label %cleanup329 ; <bool> [#uses=1]
%tmp.upgrd.4 = call %struct.QTextDocumentPrivate* @_ZNK13QTextDocument6d_funcEv( %struct.QAbstractTextDocumentLayout* %this ) ; <%struct.QTextDocumentPrivate*> [#uses=5]
%tmp.upgrd.5 = getelementptr %struct.QPrinter* %printer, i32 0, i32 0 ; <%struct.QPaintDevice*> [#uses=1]
call void @_ZN8QPainterC1EP12QPaintDevice( %struct.QPainter* %p, %struct.QPaintDevice* %tmp.upgrd.5 )
%tmp.upgrd.6 = invoke i1 @_ZNK8QPainter8isActiveEv( %struct.QPainter* %p )
to label %invcont unwind label %cleanup329 ; <i1> [#uses=1]
invcont: ; preds = %entry
br bool %tmp, label %cond_next, label %cleanup328
br i1 %tmp.upgrd.6, label %cond_next, label %cleanup328
cond_next: ; preds = %invcont
%tmp8 = invoke %struct.QAbstractTextDocumentLayout* %_ZNK13QTextDocument14documentLayoutEv( %struct.QAbstractTextDocumentLayout* %this )
%tmp8 = invoke %struct.QAbstractTextDocumentLayout* @_ZNK13QTextDocument14documentLayoutEv( %struct.QAbstractTextDocumentLayout* %this )
to label %invcont7 unwind label %cleanup329 ; <%struct.QAbstractTextDocumentLayout*> [#uses=0]
invcont7: ; preds = %cond_next
%tmp10 = getelementptr %struct.QTextDocumentPrivate* %tmp, int 0, uint 26 ; <%struct.QPointF*> [#uses=1]
call void %_ZN7QPointFC1Edd( %struct.QPointF* %tmp, double 0.000000e+00, double 0.000000e+00 )
call void %_ZN6QRectFC1ERK7QPointFRK6QSizeF( %struct.QRectF* %body, %struct.QPointF* %tmp, %struct.QPointF* %tmp10 )
call void %_ZN7QPointFC1Ev( %struct.QPointF* %pageNumberPos )
%tmp12 = getelementptr %struct.QTextDocumentPrivate* %tmp, int 0, uint 26 ; <%struct.QPointF*> [#uses=1]
%tmp13 = call bool %_ZNK6QSizeF7isValidEv( %struct.QPointF* %tmp12 ) ; <bool> [#uses=1]
br bool %tmp13, label %cond_next15, label %bb
%tmp10 = getelementptr %struct.QTextDocumentPrivate* %tmp.upgrd.4, i32 0, i32 26 ; <%struct.QPointF*> [#uses=1]
call void @_ZN7QPointFC1Edd( %struct.QPointF* %tmp, double 0.000000e+00, double 0.000000e+00 )
call void @_ZN6QRectFC1ERK7QPointFRK6QSizeF( %struct.QRectF* %body, %struct.QPointF* %tmp, %struct.QPointF* %tmp10 )
call void @_ZN7QPointFC1Ev( %struct.QPointF* %pageNumberPos )
%tmp12 = getelementptr %struct.QTextDocumentPrivate* %tmp.upgrd.4, i32 0, i32 26 ; <%struct.QPointF*> [#uses=1]
%tmp13 = call i1 @_ZNK6QSizeF7isValidEv( %struct.QPointF* %tmp12 ) ; <i1> [#uses=1]
br i1 %tmp13, label %cond_next15, label %bb
cond_next15: ; preds = %invcont7
%tmp17 = getelementptr %struct.QTextDocumentPrivate* %tmp, int 0, uint 26 ; <%struct.QPointF*> [#uses=1]
%tmp = call double %_ZNK6QSizeF6heightEv( %struct.QPointF* %tmp17 ) ; <double> [#uses=1]
%tmp18 = seteq double %tmp, 0x41DFFFFFFFC00000 ; <bool> [#uses=1]
br bool %tmp18, label %bb, label %cond_next20
%tmp17 = getelementptr %struct.QTextDocumentPrivate* %tmp.upgrd.4, i32 0, i32 26 ; <%struct.QPointF*> [#uses=1]
%tmp.upgrd.7 = call double @_ZNK6QSizeF6heightEv( %struct.QPointF* %tmp17 ) ; <double> [#uses=1]
%tmp18 = fcmp oeq double %tmp.upgrd.7, 0x41DFFFFFFFC00000 ; <i1> [#uses=1]
br i1 %tmp18, label %bb, label %cond_next20
cond_next20: ; preds = %cond_next15
br label %bb21
bb: ; preds = %cond_next15, %invcont7
br label %bb21
bb21: ; preds = %bb, %cond_next20
%iftmp.406.0 = phi bool [ false, %bb ], [ true, %cond_next20 ] ; <bool> [#uses=1]
br bool %iftmp.406.0, label %cond_true24, label %cond_false
%iftmp.406.0 = phi i1 [ false, %bb ], [ true, %cond_next20 ] ; <i1> [#uses=1]
br i1 %iftmp.406.0, label %cond_true24, label %cond_false
cond_true24: ; preds = %bb21
%tmp = invoke int %_Z13qt_defaultDpiv( )
to label %invcont25 unwind label %cleanup329 ; <int> [#uses=1]
%tmp.upgrd.8 = invoke i32 @_Z13qt_defaultDpiv( )
to label %invcont25 unwind label %cleanup329 ; <i32> [#uses=1]
invcont25: ; preds = %cond_true24
%tmp26 = cast int %tmp to double ; <double> [#uses=2]
%tmp30 = invoke %struct.QAbstractTextDocumentLayout* %_ZNK13QTextDocument14documentLayoutEv( %struct.QAbstractTextDocumentLayout* %this )
%tmp26 = sitofp i32 %tmp.upgrd.8 to double ; <double> [#uses=2]
%tmp30 = invoke %struct.QAbstractTextDocumentLayout* @_ZNK13QTextDocument14documentLayoutEv( %struct.QAbstractTextDocumentLayout* %this )
to label %invcont29 unwind label %cleanup329 ; <%struct.QAbstractTextDocumentLayout*> [#uses=1]
invcont29: ; preds = %invcont25
%tmp32 = invoke %struct.QPaintDevice* %_ZNK27QAbstractTextDocumentLayout11paintDeviceEv( %struct.QAbstractTextDocumentLayout* %tmp30 )
%tmp32 = invoke %struct.QPaintDevice* @_ZNK27QAbstractTextDocumentLayout11paintDeviceEv( %struct.QAbstractTextDocumentLayout* %tmp30 )
to label %invcont31 unwind label %cleanup329 ; <%struct.QPaintDevice*> [#uses=3]
invcont31: ; preds = %invcont29
%tmp34 = seteq %struct.QPaintDevice* %tmp32, null ; <bool> [#uses=1]
br bool %tmp34, label %cond_next42, label %cond_true35
%tmp34 = icmp eq %struct.QPaintDevice* %tmp32, null ; <i1> [#uses=1]
br i1 %tmp34, label %cond_next42, label %cond_true35
cond_true35: ; preds = %invcont31
%tmp38 = invoke int %_ZNK12QPaintDevice11logicalDpiXEv( %struct.QPaintDevice* %tmp32 )
to label %invcont37 unwind label %cleanup329 ; <int> [#uses=1]
%tmp38 = invoke i32 @_ZNK12QPaintDevice11logicalDpiXEv( %struct.QPaintDevice* %tmp32 )
to label %invcont37 unwind label %cleanup329 ; <i32> [#uses=1]
invcont37: ; preds = %cond_true35
%tmp38 = cast int %tmp38 to double ; <double> [#uses=1]
%tmp41 = invoke int %_ZNK12QPaintDevice11logicalDpiYEv( %struct.QPaintDevice* %tmp32 )
to label %invcont40 unwind label %cleanup329 ; <int> [#uses=1]
%tmp38.upgrd.9 = sitofp i32 %tmp38 to double ; <double> [#uses=1]
%tmp41 = invoke i32 @_ZNK12QPaintDevice11logicalDpiYEv( %struct.QPaintDevice* %tmp32 )
to label %invcont40 unwind label %cleanup329 ; <i32> [#uses=1]
invcont40: ; preds = %invcont37
%tmp41 = cast int %tmp41 to double ; <double> [#uses=1]
%tmp41.upgrd.10 = sitofp i32 %tmp41 to double ; <double> [#uses=1]
br label %cond_next42
cond_next42: ; preds = %invcont40, %invcont31
%sourceDpiY.2 = phi double [ %tmp41, %invcont40 ], [ %tmp26, %invcont31 ] ; <double> [#uses=1]
%sourceDpiX.2 = phi double [ %tmp38, %invcont40 ], [ %tmp26, %invcont31 ] ; <double> [#uses=1]
%tmp44 = getelementptr %struct.QPrinter* %printer, int 0, uint 0 ; <%struct.QPaintDevice*> [#uses=1]
%tmp46 = invoke int %_ZNK12QPaintDevice11logicalDpiXEv( %struct.QPaintDevice* %tmp44 )
to label %invcont45 unwind label %cleanup329 ; <int> [#uses=1]
%sourceDpiY.2 = phi double [ %tmp41.upgrd.10, %invcont40 ], [ %tmp26, %invcont31 ] ; <double> [#uses=1]
%sourceDpiX.2 = phi double [ %tmp38.upgrd.9, %invcont40 ], [ %tmp26, %invcont31 ] ; <double> [#uses=1]
%tmp44 = getelementptr %struct.QPrinter* %printer, i32 0, i32 0 ; <%struct.QPaintDevice*> [#uses=1]
%tmp46 = invoke i32 @_ZNK12QPaintDevice11logicalDpiXEv( %struct.QPaintDevice* %tmp44 )
to label %invcont45 unwind label %cleanup329 ; <i32> [#uses=1]
invcont45: ; preds = %cond_next42
%tmp46 = cast int %tmp46 to double ; <double> [#uses=1]
%tmp48 = fdiv double %tmp46, %sourceDpiX.2 ; <double> [#uses=2]
%tmp50 = getelementptr %struct.QPrinter* %printer, int 0, uint 0 ; <%struct.QPaintDevice*> [#uses=1]
%tmp52 = invoke int %_ZNK12QPaintDevice11logicalDpiYEv( %struct.QPaintDevice* %tmp50 )
to label %invcont51 unwind label %cleanup329 ; <int> [#uses=1]
%tmp46.upgrd.11 = sitofp i32 %tmp46 to double ; <double> [#uses=1]
%tmp48 = fdiv double %tmp46.upgrd.11, %sourceDpiX.2 ; <double> [#uses=2]
%tmp50 = getelementptr %struct.QPrinter* %printer, i32 0, i32 0 ; <%struct.QPaintDevice*> [#uses=1]
%tmp52 = invoke i32 @_ZNK12QPaintDevice11logicalDpiYEv( %struct.QPaintDevice* %tmp50 )
to label %invcont51 unwind label %cleanup329 ; <i32> [#uses=1]
invcont51: ; preds = %invcont45
%tmp52 = cast int %tmp52 to double ; <double> [#uses=1]
%tmp54 = fdiv double %tmp52, %sourceDpiY.2 ; <double> [#uses=2]
invoke void %_ZN8QPainter5scaleEdd( %struct.QPainter* %p, double %tmp48, double %tmp54 )
%tmp52.upgrd.12 = sitofp i32 %tmp52 to double ; <double> [#uses=1]
%tmp54 = fdiv double %tmp52.upgrd.12, %sourceDpiY.2 ; <double> [#uses=2]
invoke void @_ZN8QPainter5scaleEdd( %struct.QPainter* %p, double %tmp48, double %tmp54 )
to label %invcont57 unwind label %cleanup329
invcont57: ; preds = %invcont51
%tmp = getelementptr %struct.QPointF* %scaledPageSize, int 0, uint 0 ; <double*> [#uses=1]
%tmp60 = getelementptr %struct.QTextDocumentPrivate* %tmp, int 0, uint 26, uint 0 ; <double*> [#uses=1]
%tmp.upgrd.13 = getelementptr %struct.QPointF* %scaledPageSize, i32 0, i32 0 ; <double*> [#uses=1]
%tmp60 = getelementptr %struct.QTextDocumentPrivate* %tmp.upgrd.4, i32 0, i32 26, i32 0 ; <double*> [#uses=1]
%tmp61 = load double* %tmp60 ; <double> [#uses=1]
store double %tmp61, double* %tmp
%tmp62 = getelementptr %struct.QPointF* %scaledPageSize, int 0, uint 1 ; <double*> [#uses=1]
%tmp63 = getelementptr %struct.QTextDocumentPrivate* %tmp, int 0, uint 26, uint 1 ; <double*> [#uses=1]
store double %tmp61, double* %tmp.upgrd.13
%tmp62 = getelementptr %struct.QPointF* %scaledPageSize, i32 0, i32 1 ; <double*> [#uses=1]
%tmp63 = getelementptr %struct.QTextDocumentPrivate* %tmp.upgrd.4, i32 0, i32 26, i32 1 ; <double*> [#uses=1]
%tmp64 = load double* %tmp63 ; <double> [#uses=1]
store double %tmp64, double* %tmp62
%tmp65 = call double* %_ZN6QSizeF6rwidthEv( %struct.QPointF* %scaledPageSize ) ; <double*> [#uses=2]
%tmp65 = call double* @_ZN6QSizeF6rwidthEv( %struct.QPointF* %scaledPageSize ) ; <double*> [#uses=2]
%tmp67 = load double* %tmp65 ; <double> [#uses=1]
%tmp69 = mul double %tmp67, %tmp48 ; <double> [#uses=1]
store double %tmp69, double* %tmp65
%tmp71 = call double* %_ZN6QSizeF7rheightEv( %struct.QPointF* %scaledPageSize ) ; <double*> [#uses=2]
%tmp71 = call double* @_ZN6QSizeF7rheightEv( %struct.QPointF* %scaledPageSize ) ; <double*> [#uses=2]
%tmp73 = load double* %tmp71 ; <double> [#uses=1]
%tmp75 = mul double %tmp73, %tmp54 ; <double> [#uses=1]
store double %tmp75, double* %tmp71
%tmp78 = getelementptr %struct.QPrinter* %printer, int 0, uint 0 ; <%struct.QPaintDevice*> [#uses=1]
%tmp80 = invoke int %_ZNK12QPaintDevice6heightEv( %struct.QPaintDevice* %tmp78 )
to label %invcont79 unwind label %cleanup329 ; <int> [#uses=1]
%tmp78 = getelementptr %struct.QPrinter* %printer, i32 0, i32 0 ; <%struct.QPaintDevice*> [#uses=1]
%tmp80 = invoke i32 @_ZNK12QPaintDevice6heightEv( %struct.QPaintDevice* %tmp78 )
to label %invcont79 unwind label %cleanup329 ; <i32> [#uses=1]
invcont79: ; preds = %invcont57
%tmp82 = getelementptr %struct.QPrinter* %printer, int 0, uint 0 ; <%struct.QPaintDevice*> [#uses=1]
%tmp84 = invoke int %_ZNK12QPaintDevice5widthEv( %struct.QPaintDevice* %tmp82 )
to label %invcont83 unwind label %cleanup329 ; <int> [#uses=1]
%tmp82 = getelementptr %struct.QPrinter* %printer, i32 0, i32 0 ; <%struct.QPaintDevice*> [#uses=1]
%tmp84 = invoke i32 @_ZNK12QPaintDevice5widthEv( %struct.QPaintDevice* %tmp82 )
to label %invcont83 unwind label %cleanup329 ; <i32> [#uses=1]
invcont83: ; preds = %invcont79
%tmp80 = cast int %tmp80 to double ; <double> [#uses=1]
%tmp84 = cast int %tmp84 to double ; <double> [#uses=1]
call void %_ZN6QSizeFC1Edd( %struct.QPointF* %printerPageSize, double %tmp84, double %tmp80 )
%tmp85 = call double %_ZNK6QSizeF6heightEv( %struct.QPointF* %printerPageSize ) ; <double> [#uses=1]
%tmp86 = call double %_ZNK6QSizeF6heightEv( %struct.QPointF* %scaledPageSize ) ; <double> [#uses=1]
%tmp80.upgrd.14 = sitofp i32 %tmp80 to double ; <double> [#uses=1]
%tmp84.upgrd.15 = sitofp i32 %tmp84 to double ; <double> [#uses=1]
call void @_ZN6QSizeFC1Edd( %struct.QPointF* %printerPageSize, double %tmp84.upgrd.15, double %tmp80.upgrd.14 )
%tmp85 = call double @_ZNK6QSizeF6heightEv( %struct.QPointF* %printerPageSize ) ; <double> [#uses=1]
%tmp86 = call double @_ZNK6QSizeF6heightEv( %struct.QPointF* %scaledPageSize ) ; <double> [#uses=1]
%tmp87 = fdiv double %tmp85, %tmp86 ; <double> [#uses=1]
%tmp88 = call double %_ZNK6QSizeF5widthEv( %struct.QPointF* %printerPageSize ) ; <double> [#uses=1]
%tmp89 = call double %_ZNK6QSizeF5widthEv( %struct.QPointF* %scaledPageSize ) ; <double> [#uses=1]
%tmp88 = call double @_ZNK6QSizeF5widthEv( %struct.QPointF* %printerPageSize ) ; <double> [#uses=1]
%tmp89 = call double @_ZNK6QSizeF5widthEv( %struct.QPointF* %scaledPageSize ) ; <double> [#uses=1]
%tmp90 = fdiv double %tmp88, %tmp89 ; <double> [#uses=1]
invoke void %_ZN8QPainter5scaleEdd( %struct.QPainter* %p, double %tmp90, double %tmp87 )
invoke void @_ZN8QPainter5scaleEdd( %struct.QPainter* %p, double %tmp90, double %tmp87 )
to label %cond_next194 unwind label %cleanup329
cond_false: ; preds = %bb21
%tmp = getelementptr %struct.QAbstractTextDocumentLayout* %this, int 0, uint 0 ; <%struct.QObject*> [#uses=1]
%tmp95 = invoke %struct.QAbstractTextDocumentLayout* %_ZNK13QTextDocument5cloneEP7QObject( %struct.QAbstractTextDocumentLayout* %this, %struct.QObject* %tmp )
%tmp.upgrd.16 = getelementptr %struct.QAbstractTextDocumentLayout* %this, i32 0, i32 0 ; <%struct.QObject*> [#uses=1]
%tmp95 = invoke %struct.QAbstractTextDocumentLayout* @_ZNK13QTextDocument5cloneEP7QObject( %struct.QAbstractTextDocumentLayout* %this, %struct.QObject* %tmp.upgrd.16 )
to label %invcont94 unwind label %cleanup329 ; <%struct.QAbstractTextDocumentLayout*> [#uses=9]
invcont94: ; preds = %cond_false
%tmp99 = invoke %struct.QAbstractTextDocumentLayout* %_ZNK13QTextDocument14documentLayoutEv( %struct.QAbstractTextDocumentLayout* %tmp95 )
%tmp99 = invoke %struct.QAbstractTextDocumentLayout* @_ZNK13QTextDocument14documentLayoutEv( %struct.QAbstractTextDocumentLayout* %tmp95 )
to label %invcont98 unwind label %cleanup329 ; <%struct.QAbstractTextDocumentLayout*> [#uses=1]
invcont98: ; preds = %invcont94
%tmp101 = invoke %struct.QPaintDevice* %_ZNK8QPainter6deviceEv( %struct.QPainter* %p )
%tmp101 = invoke %struct.QPaintDevice* @_ZNK8QPainter6deviceEv( %struct.QPainter* %p )
to label %invcont100 unwind label %cleanup329 ; <%struct.QPaintDevice*> [#uses=1]
invcont100: ; preds = %invcont98
invoke void %_ZN27QAbstractTextDocumentLayout14setPaintDeviceEP12QPaintDevice( %struct.QAbstractTextDocumentLayout* %tmp99, %struct.QPaintDevice* %tmp101 )
invoke void @_ZN27QAbstractTextDocumentLayout14setPaintDeviceEP12QPaintDevice( %struct.QAbstractTextDocumentLayout* %tmp99, %struct.QPaintDevice* %tmp101 )
to label %invcont103 unwind label %cleanup329
invcont103: ; preds = %invcont100
%tmp105 = invoke %struct.QPaintDevice* %_ZNK8QPainter6deviceEv( %struct.QPainter* %p )
%tmp105 = invoke %struct.QPaintDevice* @_ZNK8QPainter6deviceEv( %struct.QPainter* %p )
to label %invcont104 unwind label %cleanup329 ; <%struct.QPaintDevice*> [#uses=1]
invcont104: ; preds = %invcont103
%tmp107 = invoke int %_ZNK12QPaintDevice11logicalDpiYEv( %struct.QPaintDevice* %tmp105 )
to label %invcont106 unwind label %cleanup329 ; <int> [#uses=1]
%tmp107 = invoke i32 @_ZNK12QPaintDevice11logicalDpiYEv( %struct.QPaintDevice* %tmp105 )
to label %invcont106 unwind label %cleanup329 ; <i32> [#uses=1]
invcont106: ; preds = %invcont104
%tmp108 = cast int %tmp107 to double ; <double> [#uses=1]
%tmp108 = sitofp i32 %tmp107 to double ; <double> [#uses=1]
%tmp109 = mul double %tmp108, 0x3FE93264C993264C ; <double> [#uses=1]
%tmp109 = cast double %tmp109 to int ; <int> [#uses=3]
%tmp = call %struct.QTextBlockGroup* %_ZNK13QTextDocument9rootFrameEv( %struct.QAbstractTextDocumentLayout* %tmp95 ) ; <%struct.QTextBlockGroup*> [#uses=1]
invoke csretcc void %_ZNK10QTextFrame11frameFormatEv( %struct.QTextBlockFormat* %fmt, %struct.QTextBlockGroup* %tmp )
%tmp109.upgrd.17 = fptosi double %tmp109 to i32 ; <i32> [#uses=3]
%tmp.upgrd.18 = call %struct.QTextBlockGroup* @_ZNK13QTextDocument9rootFrameEv( %struct.QAbstractTextDocumentLayout* %tmp95 ) ; <%struct.QTextBlockGroup*> [#uses=1]
invoke void @_ZNK10QTextFrame11frameFormatEv( %struct.QTextBlockFormat* sret %fmt, %struct.QTextBlockGroup* %tmp.upgrd.18 )
to label %invcont111 unwind label %cleanup329
invcont111: ; preds = %invcont106
%tmp112 = cast int %tmp109 to double ; <double> [#uses=1]
invoke void %_ZN16QTextFrameFormat9setMarginEd( %struct.QTextBlockFormat* %fmt, double %tmp112 )
%tmp112 = sitofp i32 %tmp109.upgrd.17 to double ; <double> [#uses=1]
invoke void @_ZN16QTextFrameFormat9setMarginEd( %struct.QTextBlockFormat* %fmt, double %tmp112 )
to label %invcont114 unwind label %cleanup192
invcont114: ; preds = %invcont111
%tmp116 = call %struct.QTextBlockGroup* %_ZNK13QTextDocument9rootFrameEv( %struct.QAbstractTextDocumentLayout* %tmp95 ) ; <%struct.QTextBlockGroup*> [#uses=1]
invoke void %_ZN10QTextFrame14setFrameFormatERK16QTextFrameFormat( %struct.QTextBlockGroup* %tmp116, %struct.QTextBlockFormat* %fmt )
%tmp116 = call %struct.QTextBlockGroup* @_ZNK13QTextDocument9rootFrameEv( %struct.QAbstractTextDocumentLayout* %tmp95 ) ; <%struct.QTextBlockGroup*> [#uses=1]
invoke void @_ZN10QTextFrame14setFrameFormatERK16QTextFrameFormat( %struct.QTextBlockGroup* %tmp116, %struct.QTextBlockFormat* %fmt )
to label %invcont117 unwind label %cleanup192
invcont117: ; preds = %invcont114
%tmp119 = invoke %struct.QPaintDevice* %_ZNK8QPainter6deviceEv( %struct.QPainter* %p )
%tmp119 = invoke %struct.QPaintDevice* @_ZNK8QPainter6deviceEv( %struct.QPainter* %p )
to label %invcont118 unwind label %cleanup192 ; <%struct.QPaintDevice*> [#uses=1]
invcont118: ; preds = %invcont117
%tmp121 = invoke int %_ZNK12QPaintDevice6heightEv( %struct.QPaintDevice* %tmp119 )
to label %invcont120 unwind label %cleanup192 ; <int> [#uses=1]
%tmp121 = invoke i32 @_ZNK12QPaintDevice6heightEv( %struct.QPaintDevice* %tmp119 )
to label %invcont120 unwind label %cleanup192 ; <i32> [#uses=1]
invcont120: ; preds = %invcont118
%tmp121 = cast int %tmp121 to double ; <double> [#uses=1]
%tmp123 = invoke %struct.QPaintDevice* %_ZNK8QPainter6deviceEv( %struct.QPainter* %p )
%tmp121.upgrd.19 = sitofp i32 %tmp121 to double ; <double> [#uses=1]
%tmp123 = invoke %struct.QPaintDevice* @_ZNK8QPainter6deviceEv( %struct.QPainter* %p )
to label %invcont122 unwind label %cleanup192 ; <%struct.QPaintDevice*> [#uses=1]
invcont122: ; preds = %invcont120
%tmp125 = invoke int %_ZNK12QPaintDevice5widthEv( %struct.QPaintDevice* %tmp123 )
to label %invcont124 unwind label %cleanup192 ; <int> [#uses=1]
%tmp125 = invoke i32 @_ZNK12QPaintDevice5widthEv( %struct.QPaintDevice* %tmp123 )
to label %invcont124 unwind label %cleanup192 ; <i32> [#uses=1]
invcont124: ; preds = %invcont122
%tmp125 = cast int %tmp125 to double ; <double> [#uses=1]
call void %_ZN6QRectFC1Edddd( %struct.QRectF* %tmp, double 0.000000e+00, double 0.000000e+00, double %tmp125, double %tmp121 )
%tmp126 = getelementptr %struct.QRectF* %body, int 0, uint 0 ; <double*> [#uses=1]
%tmp127 = getelementptr %struct.QRectF* %tmp, int 0, uint 0 ; <double*> [#uses=1]
%tmp125.upgrd.20 = sitofp i32 %tmp125 to double ; <double> [#uses=1]
call void @_ZN6QRectFC1Edddd( %struct.QRectF* %tmp.upgrd.1, double 0.000000e+00, double 0.000000e+00, double %tmp125.upgrd.20, double %tmp121.upgrd.19 )
%tmp126 = getelementptr %struct.QRectF* %body, i32 0, i32 0 ; <double*> [#uses=1]
%tmp127 = getelementptr %struct.QRectF* %tmp.upgrd.1, i32 0, i32 0 ; <double*> [#uses=1]
%tmp128 = load double* %tmp127 ; <double> [#uses=1]
store double %tmp128, double* %tmp126
%tmp129 = getelementptr %struct.QRectF* %body, int 0, uint 1 ; <double*> [#uses=1]
%tmp130 = getelementptr %struct.QRectF* %tmp, int 0, uint 1 ; <double*> [#uses=1]
%tmp129 = getelementptr %struct.QRectF* %body, i32 0, i32 1 ; <double*> [#uses=1]
%tmp130 = getelementptr %struct.QRectF* %tmp.upgrd.1, i32 0, i32 1 ; <double*> [#uses=1]
%tmp131 = load double* %tmp130 ; <double> [#uses=1]
store double %tmp131, double* %tmp129
%tmp132 = getelementptr %struct.QRectF* %body, int 0, uint 2 ; <double*> [#uses=1]
%tmp133 = getelementptr %struct.QRectF* %tmp, int 0, uint 2 ; <double*> [#uses=1]
%tmp132 = getelementptr %struct.QRectF* %body, i32 0, i32 2 ; <double*> [#uses=1]
%tmp133 = getelementptr %struct.QRectF* %tmp.upgrd.1, i32 0, i32 2 ; <double*> [#uses=1]
%tmp134 = load double* %tmp133 ; <double> [#uses=1]
store double %tmp134, double* %tmp132
%tmp135 = getelementptr %struct.QRectF* %body, int 0, uint 3 ; <double*> [#uses=1]
%tmp136 = getelementptr %struct.QRectF* %tmp, int 0, uint 3 ; <double*> [#uses=1]
%tmp135 = getelementptr %struct.QRectF* %body, i32 0, i32 3 ; <double*> [#uses=1]
%tmp136 = getelementptr %struct.QRectF* %tmp.upgrd.1, i32 0, i32 3 ; <double*> [#uses=1]
%tmp137 = load double* %tmp136 ; <double> [#uses=1]
store double %tmp137, double* %tmp135
%tmp138 = call double %_ZNK6QRectF6heightEv( %struct.QRectF* %body ) ; <double> [#uses=1]
%tmp139 = cast int %tmp109 to double ; <double> [#uses=1]
%tmp138 = call double @_ZNK6QRectF6heightEv( %struct.QRectF* %body ) ; <double> [#uses=1]
%tmp139 = sitofp i32 %tmp109.upgrd.17 to double ; <double> [#uses=1]
%tmp140 = sub double %tmp138, %tmp139 ; <double> [#uses=1]
%tmp142 = invoke %struct.QPaintDevice* %_ZNK8QPainter6deviceEv( %struct.QPainter* %p )
%tmp142 = invoke %struct.QPaintDevice* @_ZNK8QPainter6deviceEv( %struct.QPainter* %p )
to label %invcont141 unwind label %cleanup192 ; <%struct.QPaintDevice*> [#uses=1]
invcont141: ; preds = %invcont124
invoke csretcc void %_ZNK13QTextDocument11defaultFontEv( %struct.QFont* %tmp, %struct.QAbstractTextDocumentLayout* %tmp95 )
invoke void @_ZNK13QTextDocument11defaultFontEv( %struct.QFont* sret %tmp.upgrd.3, %struct.QAbstractTextDocumentLayout* %tmp95 )
to label %invcont144 unwind label %cleanup192
invcont144: ; preds = %invcont141
invoke void %_ZN12QFontMetricsC1ERK5QFontP12QPaintDevice( %struct.QFontMetrics* %tmp, %struct.QFont* %tmp, %struct.QPaintDevice* %tmp142 )
invoke void @_ZN12QFontMetricsC1ERK5QFontP12QPaintDevice( %struct.QFontMetrics* %tmp.upgrd.2, %struct.QFont* %tmp.upgrd.3, %struct.QPaintDevice* %tmp142 )
to label %invcont146 unwind label %cleanup173
invcont146: ; preds = %invcont144
%tmp149 = invoke int %_ZNK12QFontMetrics6ascentEv( %struct.QFontMetrics* %tmp )
to label %invcont148 unwind label %cleanup168 ; <int> [#uses=1]
%tmp149 = invoke i32 @_ZNK12QFontMetrics6ascentEv( %struct.QFontMetrics* %tmp.upgrd.2 )
to label %invcont148 unwind label %cleanup168 ; <i32> [#uses=1]
invcont148: ; preds = %invcont146
%tmp149 = cast int %tmp149 to double ; <double> [#uses=1]
%tmp150 = add double %tmp140, %tmp149 ; <double> [#uses=1]
%tmp152 = invoke %struct.QPaintDevice* %_ZNK8QPainter6deviceEv( %struct.QPainter* %p )
%tmp149.upgrd.21 = sitofp i32 %tmp149 to double ; <double> [#uses=1]
%tmp150 = add double %tmp140, %tmp149.upgrd.21 ; <double> [#uses=1]
%tmp152 = invoke %struct.QPaintDevice* @_ZNK8QPainter6deviceEv( %struct.QPainter* %p )
to label %invcont151 unwind label %cleanup168 ; <%struct.QPaintDevice*> [#uses=1]
invcont151: ; preds = %invcont148
%tmp154 = invoke int %_ZNK12QPaintDevice11logicalDpiYEv( %struct.QPaintDevice* %tmp152 )
to label %invcont153 unwind label %cleanup168 ; <int> [#uses=1]
%tmp154 = invoke i32 @_ZNK12QPaintDevice11logicalDpiYEv( %struct.QPaintDevice* %tmp152 )
to label %invcont153 unwind label %cleanup168 ; <i32> [#uses=1]
invcont153: ; preds = %invcont151
%tmp155 = mul int %tmp154, 5 ; <int> [#uses=1]
%tmp156 = sdiv int %tmp155, 72 ; <int> [#uses=1]
%tmp156 = cast int %tmp156 to double ; <double> [#uses=1]
%tmp157 = add double %tmp150, %tmp156 ; <double> [#uses=1]
%tmp158 = call double %_ZNK6QRectF5widthEv( %struct.QRectF* %body ) ; <double> [#uses=1]
%tmp159 = cast int %tmp109 to double ; <double> [#uses=1]
%tmp155 = mul i32 %tmp154, 5 ; <i32> [#uses=1]
%tmp156 = sdiv i32 %tmp155, 72 ; <i32> [#uses=1]
%tmp156.upgrd.22 = sitofp i32 %tmp156 to double ; <double> [#uses=1]
%tmp157 = add double %tmp150, %tmp156.upgrd.22 ; <double> [#uses=1]
%tmp158 = call double @_ZNK6QRectF5widthEv( %struct.QRectF* %body ) ; <double> [#uses=1]
%tmp159 = sitofp i32 %tmp109.upgrd.17 to double ; <double> [#uses=1]
%tmp160 = sub double %tmp158, %tmp159 ; <double> [#uses=1]
call void %_ZN7QPointFC1Edd( %struct.QPointF* %tmp2, double %tmp160, double %tmp157 )
%tmp161 = getelementptr %struct.QPointF* %pageNumberPos, int 0, uint 0 ; <double*> [#uses=1]
%tmp162 = getelementptr %struct.QPointF* %tmp2, int 0, uint 0 ; <double*> [#uses=1]
call void @_ZN7QPointFC1Edd( %struct.QPointF* %tmp2, double %tmp160, double %tmp157 )
%tmp161 = getelementptr %struct.QPointF* %pageNumberPos, i32 0, i32 0 ; <double*> [#uses=1]
%tmp162 = getelementptr %struct.QPointF* %tmp2, i32 0, i32 0 ; <double*> [#uses=1]
%tmp163 = load double* %tmp162 ; <double> [#uses=1]
store double %tmp163, double* %tmp161
%tmp164 = getelementptr %struct.QPointF* %pageNumberPos, int 0, uint 1 ; <double*> [#uses=1]
%tmp165 = getelementptr %struct.QPointF* %tmp2, int 0, uint 1 ; <double*> [#uses=1]
%tmp164 = getelementptr %struct.QPointF* %pageNumberPos, i32 0, i32 1 ; <double*> [#uses=1]
%tmp165 = getelementptr %struct.QPointF* %tmp2, i32 0, i32 1 ; <double*> [#uses=1]
%tmp166 = load double* %tmp165 ; <double> [#uses=1]
store double %tmp166, double* %tmp164
invoke void %_ZN12QFontMetricsD1Ev( %struct.QFontMetrics* %tmp )
invoke void @_ZN12QFontMetricsD1Ev( %struct.QFontMetrics* %tmp.upgrd.2 )
to label %cleanup171 unwind label %cleanup173
cleanup168: ; preds = %invcont151, %invcont148, %invcont146
invoke void %_ZN12QFontMetricsD1Ev( %struct.QFontMetrics* %tmp )
invoke void @_ZN12QFontMetricsD1Ev( %struct.QFontMetrics* %tmp.upgrd.2 )
to label %cleanup173 unwind label %cleanup173
cleanup171: ; preds = %invcont153
invoke void %_ZN5QFontD1Ev( %struct.QFont* %tmp )
invoke void @_ZN5QFontD1Ev( %struct.QFont* %tmp.upgrd.3 )
to label %finally170 unwind label %cleanup192
cleanup173: ; preds = %cleanup168, %cleanup168, %invcont153, %invcont144
invoke void %_ZN5QFontD1Ev( %struct.QFont* %tmp )
invoke void @_ZN5QFontD1Ev( %struct.QFont* %tmp.upgrd.3 )
to label %cleanup192 unwind label %cleanup192
finally170: ; preds = %cleanup171
invoke csretcc void %_ZNK13QTextDocument11defaultFontEv( %struct.QFont* %font, %struct.QAbstractTextDocumentLayout* %tmp95 )
invoke void @_ZNK13QTextDocument11defaultFontEv( %struct.QFont* sret %font, %struct.QAbstractTextDocumentLayout* %tmp95 )
to label %invcont177 unwind label %cleanup192
invcont177: ; preds = %finally170
invoke void %_ZN5QFont12setPointSizeEi( %struct.QFont* %font, int 10 )
invoke void @_ZN5QFont12setPointSizeEi( %struct.QFont* %font, i32 10 )
to label %invcont179 unwind label %cleanup187
invcont179: ; preds = %invcont177
invoke void %_ZN13QTextDocument14setDefaultFontERK5QFont( %struct.QAbstractTextDocumentLayout* %tmp95, %struct.QFont* %font )
invoke void @_ZN13QTextDocument14setDefaultFontERK5QFont( %struct.QAbstractTextDocumentLayout* %tmp95, %struct.QFont* %font )
to label %invcont181 unwind label %cleanup187
invcont181: ; preds = %invcont179
call csretcc void %_ZNK6QRectF4sizeEv( %struct.QPointF* %tmp3, %struct.QRectF* %body )
invoke void %_ZN13QTextDocument11setPageSizeERK6QSizeF( %struct.QAbstractTextDocumentLayout* %tmp95, %struct.QPointF* %tmp3 )
call void @_ZNK6QRectF4sizeEv( %struct.QPointF* sret %tmp3, %struct.QRectF* %body )
invoke void @_ZN13QTextDocument11setPageSizeERK6QSizeF( %struct.QAbstractTextDocumentLayout* %tmp95, %struct.QPointF* %tmp3 )
to label %cleanup185 unwind label %cleanup187
cleanup185: ; preds = %invcont181
invoke void %_ZN5QFontD1Ev( %struct.QFont* %font )
invoke void @_ZN5QFontD1Ev( %struct.QFont* %font )
to label %cleanup190 unwind label %cleanup192
cleanup187: ; preds = %invcont181, %invcont179, %invcont177
invoke void %_ZN5QFontD1Ev( %struct.QFont* %font )
invoke void @_ZN5QFontD1Ev( %struct.QFont* %font )
to label %cleanup192 unwind label %cleanup192
cleanup190: ; preds = %cleanup185
invoke void %_ZN16QTextFrameFormatD1Ev( %struct.QTextBlockFormat* %fmt )
invoke void @_ZN16QTextFrameFormatD1Ev( %struct.QTextBlockFormat* %fmt )
to label %cond_next194 unwind label %cleanup329
cleanup192: ; preds = %cleanup187, %cleanup187, %cleanup185, %finally170, %cleanup173, %cleanup173, %cleanup171, %invcont141, %invcont124, %invcont122, %invcont120, %invcont118, %invcont117, %invcont114, %invcont111
invoke void %_ZN16QTextFrameFormatD1Ev( %struct.QTextBlockFormat* %fmt )
invoke void @_ZN16QTextFrameFormatD1Ev( %struct.QTextBlockFormat* %fmt )
to label %cleanup329 unwind label %cleanup329
cond_next194: ; preds = %cleanup190, %invcont83
%clonedDoc.1 = phi %struct.QAbstractTextDocumentLayout* [ null, %invcont83 ], [ %tmp95, %cleanup190 ] ; <%struct.QAbstractTextDocumentLayout*> [#uses=3]
%doc.1 = phi %struct.QAbstractTextDocumentLayout* [ %this, %invcont83 ], [ %tmp95, %cleanup190 ] ; <%struct.QAbstractTextDocumentLayout*> [#uses=2]
%tmp197 = invoke bool %_ZNK8QPrinter13collateCopiesEv( %struct.QPrinter* %printer )
to label %invcont196 unwind label %cleanup329 ; <bool> [#uses=1]
%tmp197 = invoke i1 @_ZNK8QPrinter13collateCopiesEv( %struct.QPrinter* %printer )
to label %invcont196 unwind label %cleanup329 ; <i1> [#uses=1]
invcont196: ; preds = %cond_next194
br bool %tmp197, label %cond_true200, label %cond_false204
br i1 %tmp197, label %cond_true200, label %cond_false204
cond_true200: ; preds = %invcont196
%tmp203 = invoke int %_ZNK8QPrinter9numCopiesEv( %struct.QPrinter* %printer )
to label %invcont202 unwind label %cleanup329 ; <int> [#uses=1]
%tmp203 = invoke i32 @_ZNK8QPrinter9numCopiesEv( %struct.QPrinter* %printer )
to label %invcont202 unwind label %cleanup329 ; <i32> [#uses=1]
invcont202: ; preds = %cond_true200
br label %cond_next208
cond_false204: ; preds = %invcont196
%tmp207 = invoke int %_ZNK8QPrinter9numCopiesEv( %struct.QPrinter* %printer )
to label %invcont206 unwind label %cleanup329 ; <int> [#uses=1]
%tmp207 = invoke i32 @_ZNK8QPrinter9numCopiesEv( %struct.QPrinter* %printer )
to label %invcont206 unwind label %cleanup329 ; <i32> [#uses=1]
invcont206: ; preds = %cond_false204
br label %cond_next208
cond_next208: ; preds = %invcont206, %invcont202
%pageCopies.0 = phi int [ %tmp203, %invcont202 ], [ 1, %invcont206 ] ; <int> [#uses=2]
%docCopies.0 = phi int [ 1, %invcont202 ], [ %tmp207, %invcont206 ] ; <int> [#uses=2]
%tmp211 = invoke int %_ZNK8QPrinter8fromPageEv( %struct.QPrinter* %printer )
to label %invcont210 unwind label %cleanup329 ; <int> [#uses=3]
%pageCopies.0 = phi i32 [ %tmp203, %invcont202 ], [ 1, %invcont206 ] ; <i32> [#uses=2]
%docCopies.0 = phi i32 [ 1, %invcont202 ], [ %tmp207, %invcont206 ] ; <i32> [#uses=2]
%tmp211 = invoke i32 @_ZNK8QPrinter8fromPageEv( %struct.QPrinter* %printer )
to label %invcont210 unwind label %cleanup329 ; <i32> [#uses=3]
invcont210: ; preds = %cond_next208
%tmp214 = invoke int %_ZNK8QPrinter6toPageEv( %struct.QPrinter* %printer )
to label %invcont213 unwind label %cleanup329 ; <int> [#uses=3]
%tmp214 = invoke i32 @_ZNK8QPrinter6toPageEv( %struct.QPrinter* %printer )
to label %invcont213 unwind label %cleanup329 ; <i32> [#uses=3]
invcont213: ; preds = %invcont210
%tmp216 = seteq int %tmp211, 0 ; <bool> [#uses=1]
br bool %tmp216, label %cond_true217, label %cond_next225
%tmp216 = icmp eq i32 %tmp211, 0 ; <i1> [#uses=1]
br i1 %tmp216, label %cond_true217, label %cond_next225
cond_true217: ; preds = %invcont213
%tmp219 = seteq int %tmp214, 0 ; <bool> [#uses=1]
br bool %tmp219, label %cond_true220, label %cond_next225
%tmp219 = icmp eq i32 %tmp214, 0 ; <i1> [#uses=1]
br i1 %tmp219, label %cond_true220, label %cond_next225
cond_true220: ; preds = %cond_true217
%tmp223 = invoke int %_ZNK13QTextDocument9pageCountEv( %struct.QAbstractTextDocumentLayout* %doc.1 )
to label %invcont222 unwind label %cleanup329 ; <int> [#uses=1]
%tmp223 = invoke i32 @_ZNK13QTextDocument9pageCountEv( %struct.QAbstractTextDocumentLayout* %doc.1 )
to label %invcont222 unwind label %cleanup329 ; <i32> [#uses=1]
invcont222: ; preds = %cond_true220
br label %cond_next225
cond_next225: ; preds = %invcont222, %cond_true217, %invcont213
%toPage.1 = phi int [ %tmp223, %invcont222 ], [ %tmp214, %cond_true217 ], [ %tmp214, %invcont213 ] ; <int> [#uses=2]
%fromPage.1 = phi int [ 1, %invcont222 ], [ %tmp211, %cond_true217 ], [ %tmp211, %invcont213 ] ; <int> [#uses=2]
%tmp.page = invoke uint %_ZNK8QPrinter9pageOrderEv( %struct.QPrinter* %printer )
to label %invcont227 unwind label %cleanup329 ; <uint> [#uses=1]
%toPage.1 = phi i32 [ %tmp223, %invcont222 ], [ %tmp214, %cond_true217 ], [ %tmp214, %invcont213 ] ; <i32> [#uses=2]
%fromPage.1 = phi i32 [ 1, %invcont222 ], [ %tmp211, %cond_true217 ], [ %tmp211, %invcont213 ] ; <i32> [#uses=2]
%tmp.page = invoke i32 @_ZNK8QPrinter9pageOrderEv( %struct.QPrinter* %printer )
to label %invcont227 unwind label %cleanup329 ; <i32> [#uses=1]
invcont227: ; preds = %cond_next225
%tmp228 = seteq uint %tmp.page, 1 ; <bool> [#uses=1]
br bool %tmp228, label %cond_true230, label %cond_next234
%tmp228 = icmp eq i32 %tmp.page, 1 ; <i1> [#uses=1]
br i1 %tmp228, label %cond_true230, label %cond_next234
cond_true230: ; preds = %invcont227
br label %cond_next234
cond_next234: ; preds = %cond_true230, %invcont227
%ascending.1 = phi bool [ false, %cond_true230 ], [ true, %invcont227 ] ; <bool> [#uses=1]
%toPage.2 = phi int [ %fromPage.1, %cond_true230 ], [ %toPage.1, %invcont227 ] ; <int> [#uses=1]
%fromPage.2 = phi int [ %toPage.1, %cond_true230 ], [ %fromPage.1, %invcont227 ] ; <int> [#uses=1]
%ascending.1 = phi i1 [ false, %cond_true230 ], [ true, %invcont227 ] ; <i1> [#uses=1]
%toPage.2 = phi i32 [ %fromPage.1, %cond_true230 ], [ %toPage.1, %invcont227 ] ; <i32> [#uses=1]
%fromPage.2 = phi i32 [ %toPage.1, %cond_true230 ], [ %fromPage.1, %invcont227 ] ; <i32> [#uses=1]
br label %bb309
bb237: ; preds = %cond_true313, %cond_next293
%iftmp.410.4 = phi bool [ %iftmp.410.5, %cond_true313 ], [ %iftmp.410.1, %cond_next293 ] ; <bool> [#uses=1]
%page.4 = phi int [ %fromPage.2, %cond_true313 ], [ %page.3, %cond_next293 ] ; <int> [#uses=4]
%iftmp.410.4 = phi i1 [ %iftmp.410.5, %cond_true313 ], [ %iftmp.410.1, %cond_next293 ] ; <i1> [#uses=1]
%page.4 = phi i32 [ %fromPage.2, %cond_true313 ], [ %page.3, %cond_next293 ] ; <i32> [#uses=4]
br label %bb273
invcont240: ; preds = %cond_true277
%tmp242 = seteq uint %tmp241, 2 ; <bool> [#uses=1]
br bool %tmp242, label %bb252, label %cond_next244
%tmp242 = icmp eq i32 %tmp241, 2 ; <i1> [#uses=1]
br i1 %tmp242, label %bb252, label %cond_next244
cond_next244: ; preds = %invcont240
%tmp247 = invoke uint %_ZNK8QPrinter12printerStateEv( %struct.QPrinter* %printer )
to label %invcont246 unwind label %cleanup329 ; <uint> [#uses=1]
%tmp247 = invoke i32 @_ZNK8QPrinter12printerStateEv( %struct.QPrinter* %printer )
to label %invcont246 unwind label %cleanup329 ; <i32> [#uses=1]
invcont246: ; preds = %cond_next244
%tmp248 = seteq uint %tmp247, 3 ; <bool> [#uses=1]
br bool %tmp248, label %bb252, label %bb253
%tmp248 = icmp eq i32 %tmp247, 3 ; <i1> [#uses=1]
br i1 %tmp248, label %bb252, label %bb253
bb252: ; preds = %invcont246, %invcont240
br label %bb254
bb253: ; preds = %invcont246
br label %bb254
bb254: ; preds = %bb253, %bb252
%iftmp.410.0 = phi bool [ true, %bb252 ], [ false, %bb253 ] ; <bool> [#uses=2]
br bool %iftmp.410.0, label %UserCanceled, label %cond_next258
%iftmp.410.0 = phi i1 [ true, %bb252 ], [ false, %bb253 ] ; <i1> [#uses=2]
br i1 %iftmp.410.0, label %UserCanceled, label %cond_next258
cond_next258: ; preds = %bb254
invoke fastcc void %_Z9printPageiP8QPainterPK13QTextDocumentRK6QRectFRK7QPointF( int %page.4, %struct.QPainter* %p, %struct.QAbstractTextDocumentLayout* %doc.1, %struct.QRectF* %body, %struct.QPointF* %pageNumberPos )
invoke fastcc void @_Z9printPageiP8QPainterPK13QTextDocumentRK6QRectFRK7QPointF( i32 %page.4, %struct.QPainter* %p, %struct.QAbstractTextDocumentLayout* %doc.1, %struct.QRectF* %body, %struct.QPointF* %pageNumberPos )
to label %invcont261 unwind label %cleanup329
invcont261: ; preds = %cond_next258
%tmp263 = add int %pageCopies.0, -1 ; <int> [#uses=1]
%tmp265 = setgt int %tmp263, %j.4 ; <bool> [#uses=1]
br bool %tmp265, label %cond_true266, label %cond_next270
%tmp263 = add i32 %pageCopies.0, -1 ; <i32> [#uses=1]
%tmp265 = icmp sgt i32 %tmp263, %j.4 ; <i1> [#uses=1]
br i1 %tmp265, label %cond_true266, label %cond_next270
cond_true266: ; preds = %invcont261
%tmp269 = invoke bool %_ZN8QPrinter7newPageEv( %struct.QPrinter* %printer )
to label %cond_next270 unwind label %cleanup329 ; <bool> [#uses=0]
%tmp269 = invoke i1 @_ZN8QPrinter7newPageEv( %struct.QPrinter* %printer )
to label %cond_next270 unwind label %cleanup329 ; <i1> [#uses=0]
cond_next270: ; preds = %cond_true266, %invcont261
%tmp272 = add int %j.4, 1 ; <int> [#uses=1]
%tmp272 = add i32 %j.4, 1 ; <i32> [#uses=1]
br label %bb273
bb273: ; preds = %cond_next270, %bb237
%iftmp.410.1 = phi bool [ %iftmp.410.4, %bb237 ], [ %iftmp.410.0, %cond_next270 ] ; <bool> [#uses=2]
%j.4 = phi int [ 0, %bb237 ], [ %tmp272, %cond_next270 ] ; <int> [#uses=3]
%tmp276 = setlt int %j.4, %pageCopies.0 ; <bool> [#uses=1]
br bool %tmp276, label %cond_true277, label %bb280
%iftmp.410.1 = phi i1 [ %iftmp.410.4, %bb237 ], [ %iftmp.410.0, %cond_next270 ] ; <i1> [#uses=2]
%j.4 = phi i32 [ 0, %bb237 ], [ %tmp272, %cond_next270 ] ; <i32> [#uses=3]
%tmp276 = icmp slt i32 %j.4, %pageCopies.0 ; <i1> [#uses=1]
br i1 %tmp276, label %cond_true277, label %bb280
cond_true277: ; preds = %bb273
%tmp241 = invoke uint %_ZNK8QPrinter12printerStateEv( %struct.QPrinter* %printer )
to label %invcont240 unwind label %cleanup329 ; <uint> [#uses=1]
%tmp241 = invoke i32 @_ZNK8QPrinter12printerStateEv( %struct.QPrinter* %printer )
to label %invcont240 unwind label %cleanup329 ; <i32> [#uses=1]
bb280: ; preds = %bb273
%tmp283 = seteq int %page.4, %toPage.2 ; <bool> [#uses=1]
br bool %tmp283, label %bb297, label %cond_next285
%tmp283 = icmp eq i32 %page.4, %toPage.2 ; <i1> [#uses=1]
br i1 %tmp283, label %bb297, label %cond_next285
cond_next285: ; preds = %bb280
br bool %ascending.1, label %cond_true287, label %cond_false290
br i1 %ascending.1, label %cond_true287, label %cond_false290
cond_true287: ; preds = %cond_next285
%tmp289 = add int %page.4, 1 ; <int> [#uses=1]
%tmp289 = add i32 %page.4, 1 ; <i32> [#uses=1]
br label %cond_next293
cond_false290: ; preds = %cond_next285
%tmp292 = add int %page.4, -1 ; <int> [#uses=1]
%tmp292 = add i32 %page.4, -1 ; <i32> [#uses=1]
br label %cond_next293
cond_next293: ; preds = %cond_false290, %cond_true287
%page.3 = phi int [ %tmp289, %cond_true287 ], [ %tmp292, %cond_false290 ] ; <int> [#uses=1]
%tmp296 = invoke bool %_ZN8QPrinter7newPageEv( %struct.QPrinter* %printer )
to label %bb237 unwind label %cleanup329 ; <bool> [#uses=0]
%page.3 = phi i32 [ %tmp289, %cond_true287 ], [ %tmp292, %cond_false290 ] ; <i32> [#uses=1]
%tmp296 = invoke i1 @_ZN8QPrinter7newPageEv( %struct.QPrinter* %printer )
to label %bb237 unwind label %cleanup329 ; <i1> [#uses=0]
bb297: ; preds = %bb280
%tmp299 = add int %docCopies.0, -1 ; <int> [#uses=1]
%tmp301 = setgt int %tmp299, %i.1 ; <bool> [#uses=1]
br bool %tmp301, label %cond_true302, label %cond_next306
%tmp299 = add i32 %docCopies.0, -1 ; <i32> [#uses=1]
%tmp301 = icmp sgt i32 %tmp299, %i.1 ; <i1> [#uses=1]
br i1 %tmp301, label %cond_true302, label %cond_next306
cond_true302: ; preds = %bb297
%tmp305 = invoke bool %_ZN8QPrinter7newPageEv( %struct.QPrinter* %printer )
to label %cond_next306 unwind label %cleanup329 ; <bool> [#uses=0]
%tmp305 = invoke i1 @_ZN8QPrinter7newPageEv( %struct.QPrinter* %printer )
to label %cond_next306 unwind label %cleanup329 ; <i1> [#uses=0]
cond_next306: ; preds = %cond_true302, %bb297
%tmp308 = add int %i.1, 1 ; <int> [#uses=1]
%tmp308 = add i32 %i.1, 1 ; <i32> [#uses=1]
br label %bb309
bb309: ; preds = %cond_next306, %cond_next234
%iftmp.410.5 = phi bool [ undef, %cond_next234 ], [ %iftmp.410.1, %cond_next306 ] ; <bool> [#uses=1]
%i.1 = phi int [ 0, %cond_next234 ], [ %tmp308, %cond_next306 ] ; <int> [#uses=3]
%tmp312 = setlt int %i.1, %docCopies.0 ; <bool> [#uses=1]
br bool %tmp312, label %cond_true313, label %UserCanceled
%iftmp.410.5 = phi i1 [ undef, %cond_next234 ], [ %iftmp.410.1, %cond_next306 ] ; <i1> [#uses=1]
%i.1 = phi i32 [ 0, %cond_next234 ], [ %tmp308, %cond_next306 ] ; <i32> [#uses=3]
%tmp312 = icmp slt i32 %i.1, %docCopies.0 ; <i1> [#uses=1]
br i1 %tmp312, label %cond_true313, label %UserCanceled
cond_true313: ; preds = %bb309
br label %bb237
UserCanceled: ; preds = %bb309, %bb254
%tmp318 = seteq %struct.QAbstractTextDocumentLayout* %clonedDoc.1, null ; <bool> [#uses=1]
br bool %tmp318, label %cleanup327, label %cond_true319
%tmp318 = icmp eq %struct.QAbstractTextDocumentLayout* %clonedDoc.1, null ; <i1> [#uses=1]
br i1 %tmp318, label %cleanup327, label %cond_true319
cond_true319: ; preds = %UserCanceled
%tmp = getelementptr %struct.QAbstractTextDocumentLayout* %clonedDoc.1, int 0, uint 0, uint 0 ; <int (...)***> [#uses=1]
%tmp = load int (...)*** %tmp ; <int (...)**> [#uses=1]
%tmp322 = getelementptr int (...)** %tmp, int 4 ; <int (...)**> [#uses=1]
%tmp = load int (...)** %tmp322 ; <int (...)*> [#uses=1]
%tmp = cast int (...)* %tmp to void (%struct.QAbstractTextDocumentLayout*)* ; <void (%struct.QAbstractTextDocumentLayout*)*> [#uses=1]
invoke void %tmp( %struct.QAbstractTextDocumentLayout* %clonedDoc.1 )
%tmp.upgrd.23 = getelementptr %struct.QAbstractTextDocumentLayout* %clonedDoc.1, i32 0, i32 0, i32 0 ; <i32 (...)***> [#uses=1]
%tmp.upgrd.24 = load i32 (...)*** %tmp.upgrd.23 ; <i32 (...)**> [#uses=1]
%tmp322 = getelementptr i32 (...)** %tmp.upgrd.24, i32 4 ; <i32 (...)**> [#uses=1]
%tmp.upgrd.25 = load i32 (...)** %tmp322 ; <i32 (...)*> [#uses=1]
%tmp.upgrd.26 = bitcast i32 (...)* %tmp.upgrd.25 to void (%struct.QAbstractTextDocumentLayout*)* ; <void (%struct.QAbstractTextDocumentLayout*)*> [#uses=1]
invoke void %tmp.upgrd.26( %struct.QAbstractTextDocumentLayout* %clonedDoc.1 )
to label %cleanup327 unwind label %cleanup329
cleanup327: ; preds = %cond_true319, %UserCanceled
call void %_ZN8QPainterD1Ev( %struct.QPainter* %p )
call void @_ZN8QPainterD1Ev( %struct.QPainter* %p )
ret void
cleanup328: ; preds = %invcont
call void %_ZN8QPainterD1Ev( %struct.QPainter* %p )
call void @_ZN8QPainterD1Ev( %struct.QPainter* %p )
ret void
cleanup329: ; preds = %cond_true319, %cond_true302, %cond_next293, %cond_true277, %cond_true266, %cond_next258, %cond_next244, %cond_next225, %cond_true220, %invcont210, %cond_next208, %cond_false204, %cond_true200, %cond_next194, %cleanup192, %cleanup192, %cleanup190, %invcont106, %invcont104, %invcont103, %invcont100, %invcont98, %invcont94, %cond_false, %invcont83, %invcont79, %invcont57, %invcont51, %invcont45, %cond_next42, %invcont37, %cond_true35, %invcont29, %invcont25, %cond_true24, %cond_next, %entry
call void %_ZN8QPainterD1Ev( %struct.QPainter* %p )
call void @_ZN8QPainterD1Ev( %struct.QPainter* %p )
unwind
}
declare void %_ZN6QSizeFC1Edd(%struct.QPointF*, double, double)
declare void @_ZN6QSizeFC1Edd(%struct.QPointF*, double, double)
declare bool %_ZNK6QSizeF7isValidEv(%struct.QPointF*)
declare i1 @_ZNK6QSizeF7isValidEv(%struct.QPointF*)
declare double %_ZNK6QSizeF5widthEv(%struct.QPointF*)
declare double @_ZNK6QSizeF5widthEv(%struct.QPointF*)
declare double %_ZNK6QSizeF6heightEv(%struct.QPointF*)
declare double @_ZNK6QSizeF6heightEv(%struct.QPointF*)
declare double* %_ZN6QSizeF6rwidthEv(%struct.QPointF*)
declare double* @_ZN6QSizeF6rwidthEv(%struct.QPointF*)
declare double* %_ZN6QSizeF7rheightEv(%struct.QPointF*)
declare double* @_ZN6QSizeF7rheightEv(%struct.QPointF*)
declare %struct.QTextDocumentPrivate* %_ZNK13QTextDocument6d_funcEv(%struct.QAbstractTextDocumentLayout*)
declare %struct.QTextDocumentPrivate* @_ZNK13QTextDocument6d_funcEv(%struct.QAbstractTextDocumentLayout*)
declare void %_ZN7QPointFC1Ev(%struct.QPointF*)
declare void @_ZN7QPointFC1Ev(%struct.QPointF*)
declare void %_ZN7QPointFC1Edd(%struct.QPointF*, double, double)
declare void @_ZN7QPointFC1Edd(%struct.QPointF*, double, double)
declare void %_ZN16QTextFrameFormat9setMarginEd(%struct.QTextBlockFormat*, double)
declare void @_ZN16QTextFrameFormat9setMarginEd(%struct.QTextBlockFormat*, double)
declare void %_ZN6QRectFC1Edddd(%struct.QRectF*, double, double, double, double)
declare void @_ZN6QRectFC1Edddd(%struct.QRectF*, double, double, double, double)
declare void %_ZN6QRectFC1ERK7QPointFRK6QSizeF(%struct.QRectF*, %struct.QPointF*, %struct.QPointF*)
declare void @_ZN6QRectFC1ERK7QPointFRK6QSizeF(%struct.QRectF*, %struct.QPointF*, %struct.QPointF*)
declare double %_ZNK6QRectF5widthEv(%struct.QRectF*)
declare double @_ZNK6QRectF5widthEv(%struct.QRectF*)
declare double %_ZNK6QRectF6heightEv(%struct.QRectF*)
declare double @_ZNK6QRectF6heightEv(%struct.QRectF*)
declare void %_ZNK6QRectF4sizeEv(%struct.QPointF*, %struct.QRectF*)
declare void @_ZNK6QRectF4sizeEv(%struct.QPointF*, %struct.QRectF*)
declare void %_ZN16QTextFrameFormatD1Ev(%struct.QTextBlockFormat*)
declare void @_ZN16QTextFrameFormatD1Ev(%struct.QTextBlockFormat*)
declare void %_ZNK10QTextFrame11frameFormatEv(%struct.QTextBlockFormat*, %struct.QTextBlockGroup*)
declare void @_ZNK10QTextFrame11frameFormatEv(%struct.QTextBlockFormat*, %struct.QTextBlockGroup*)
declare void %_ZN10QTextFrame14setFrameFormatERK16QTextFrameFormat(%struct.QTextBlockGroup*, %struct.QTextBlockFormat*)
declare void @_ZN10QTextFrame14setFrameFormatERK16QTextFrameFormat(%struct.QTextBlockGroup*, %struct.QTextBlockFormat*)
declare int %_ZNK12QPaintDevice5widthEv(%struct.QPaintDevice*)
declare i32 @_ZNK12QPaintDevice5widthEv(%struct.QPaintDevice*)
declare int %_ZNK12QPaintDevice6heightEv(%struct.QPaintDevice*)
declare i32 @_ZNK12QPaintDevice6heightEv(%struct.QPaintDevice*)
declare int %_ZNK12QPaintDevice11logicalDpiXEv(%struct.QPaintDevice*)
declare i32 @_ZNK12QPaintDevice11logicalDpiXEv(%struct.QPaintDevice*)
declare int %_ZNK12QPaintDevice11logicalDpiYEv(%struct.QPaintDevice*)
declare i32 @_ZNK12QPaintDevice11logicalDpiYEv(%struct.QPaintDevice*)
declare %struct.QAbstractTextDocumentLayout* %_ZNK13QTextDocument5cloneEP7QObject(%struct.QAbstractTextDocumentLayout*, %struct.QObject*)
declare %struct.QAbstractTextDocumentLayout* @_ZNK13QTextDocument5cloneEP7QObject(%struct.QAbstractTextDocumentLayout*, %struct.QObject*)
declare void %_ZN5QFontD1Ev(%struct.QFont*)
declare void @_ZN5QFontD1Ev(%struct.QFont*)
declare %struct.QAbstractTextDocumentLayout* %_ZNK13QTextDocument14documentLayoutEv(%struct.QAbstractTextDocumentLayout*)
declare %struct.QAbstractTextDocumentLayout* @_ZNK13QTextDocument14documentLayoutEv(%struct.QAbstractTextDocumentLayout*)
declare %struct.QTextBlockGroup* %_ZNK13QTextDocument9rootFrameEv(%struct.QAbstractTextDocumentLayout*)
declare %struct.QTextBlockGroup* @_ZNK13QTextDocument9rootFrameEv(%struct.QAbstractTextDocumentLayout*)
declare int %_ZNK13QTextDocument9pageCountEv(%struct.QAbstractTextDocumentLayout*)
declare i32 @_ZNK13QTextDocument9pageCountEv(%struct.QAbstractTextDocumentLayout*)
declare void %_ZNK13QTextDocument11defaultFontEv(%struct.QFont*, %struct.QAbstractTextDocumentLayout*)
declare void @_ZNK13QTextDocument11defaultFontEv(%struct.QFont*, %struct.QAbstractTextDocumentLayout*)
declare void %_ZN13QTextDocument14setDefaultFontERK5QFont(%struct.QAbstractTextDocumentLayout*, %struct.QFont*)
declare void @_ZN13QTextDocument14setDefaultFontERK5QFont(%struct.QAbstractTextDocumentLayout*, %struct.QFont*)
declare void %_ZN13QTextDocument11setPageSizeERK6QSizeF(%struct.QAbstractTextDocumentLayout*, %struct.QPointF*)
declare void @_ZN13QTextDocument11setPageSizeERK6QSizeF(%struct.QAbstractTextDocumentLayout*, %struct.QPointF*)
declare void %_Z9printPageiP8QPainterPK13QTextDocumentRK6QRectFRK7QPointF(int, %struct.QPainter*, %struct.QAbstractTextDocumentLayout*, %struct.QRectF*, %struct.QPointF*)
declare void @_Z9printPageiP8QPainterPK13QTextDocumentRK6QRectFRK7QPointF(i32, %struct.QPainter*, %struct.QAbstractTextDocumentLayout*, %struct.QRectF*, %struct.QPointF*)
declare void %_ZN12QFontMetricsD1Ev(%struct.QFontMetrics*)
declare void @_ZN12QFontMetricsD1Ev(%struct.QFontMetrics*)
declare void %_ZN8QPainterC1EP12QPaintDevice(%struct.QPainter*, %struct.QPaintDevice*)
declare void @_ZN8QPainterC1EP12QPaintDevice(%struct.QPainter*, %struct.QPaintDevice*)
declare bool %_ZNK8QPainter8isActiveEv(%struct.QPainter*)
declare i1 @_ZNK8QPainter8isActiveEv(%struct.QPainter*)
declare int %_Z13qt_defaultDpiv()
declare i32 @_Z13qt_defaultDpiv()
declare %struct.QPaintDevice* %_ZNK27QAbstractTextDocumentLayout11paintDeviceEv(%struct.QAbstractTextDocumentLayout*)
declare %struct.QPaintDevice* @_ZNK27QAbstractTextDocumentLayout11paintDeviceEv(%struct.QAbstractTextDocumentLayout*)
declare void %_ZN8QPainter5scaleEdd(%struct.QPainter*, double, double)
declare void @_ZN8QPainter5scaleEdd(%struct.QPainter*, double, double)
declare %struct.QPaintDevice* %_ZNK8QPainter6deviceEv(%struct.QPainter*)
declare %struct.QPaintDevice* @_ZNK8QPainter6deviceEv(%struct.QPainter*)
declare void %_ZN27QAbstractTextDocumentLayout14setPaintDeviceEP12QPaintDevice(%struct.QAbstractTextDocumentLayout*, %struct.QPaintDevice*)
declare void @_ZN27QAbstractTextDocumentLayout14setPaintDeviceEP12QPaintDevice(%struct.QAbstractTextDocumentLayout*, %struct.QPaintDevice*)
declare void %_ZN12QFontMetricsC1ERK5QFontP12QPaintDevice(%struct.QFontMetrics*, %struct.QFont*, %struct.QPaintDevice*)
declare void @_ZN12QFontMetricsC1ERK5QFontP12QPaintDevice(%struct.QFontMetrics*, %struct.QFont*, %struct.QPaintDevice*)
declare int %_ZNK12QFontMetrics6ascentEv(%struct.QFontMetrics*)
declare i32 @_ZNK12QFontMetrics6ascentEv(%struct.QFontMetrics*)
declare void %_ZN5QFont12setPointSizeEi(%struct.QFont*, int)
declare void @_ZN5QFont12setPointSizeEi(%struct.QFont*, i32)
declare bool %_ZNK8QPrinter13collateCopiesEv(%struct.QPrinter*)
declare i1 @_ZNK8QPrinter13collateCopiesEv(%struct.QPrinter*)
declare int %_ZNK8QPrinter9numCopiesEv(%struct.QPrinter*)
declare i32 @_ZNK8QPrinter9numCopiesEv(%struct.QPrinter*)
declare int %_ZNK8QPrinter8fromPageEv(%struct.QPrinter*)
declare i32 @_ZNK8QPrinter8fromPageEv(%struct.QPrinter*)
declare int %_ZNK8QPrinter6toPageEv(%struct.QPrinter*)
declare i32 @_ZNK8QPrinter6toPageEv(%struct.QPrinter*)
declare uint %_ZNK8QPrinter9pageOrderEv(%struct.QPrinter*)
declare i32 @_ZNK8QPrinter9pageOrderEv(%struct.QPrinter*)
declare uint %_ZNK8QPrinter12printerStateEv(%struct.QPrinter*)
declare i32 @_ZNK8QPrinter12printerStateEv(%struct.QPrinter*)
declare bool %_ZN8QPrinter7newPageEv(%struct.QPrinter*)
declare i1 @_ZN8QPrinter7newPageEv(%struct.QPrinter*)
declare void %_ZN8QPainterD1Ev(%struct.QPainter*)
declare void @_ZN8QPainterD1Ev(%struct.QPainter*)

View File

@ -1,145 +1,131 @@
; RUN: llvm-upgrade < %s | llvm-as | opt -simplifycfg | llvm-dis
; RUN: llvm-as < %s | opt -simplifycfg | llvm-dis
; END.
; ModuleID = 'bugpoint-tooptimize.bc'
; ModuleID = '2006-12-08-Ptr-ICmp-Branch.ll'
target datalayout = "e-p:32:32"
target endian = little
target pointersize = 32
target triple = "i686-pc-linux-gnu"
%struct.FILE = type { int, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, %struct._IO_marker*, %struct.FILE*, int, int, int, ushort, sbyte, [1 x sbyte], sbyte*, long, sbyte*, sbyte*, sbyte*, sbyte*, uint, int, [40 x sbyte] }
%struct._IO_FILE = type { int, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, %struct._IO_marker*, %struct.FILE*, int, int, int, ushort, sbyte, [1 x sbyte], sbyte*, long, sbyte*, sbyte*, sbyte*, sbyte*, uint, int, [40 x sbyte] }
%struct._IO_marker = type { %struct._IO_marker*, %struct.FILE*, int }
%struct.charsequence = type { sbyte*, uint, uint }
%struct.trie_s = type { [26 x %struct.trie_s*], int }
%str = external global [14 x sbyte] ; <[14 x sbyte]*> [#uses=0]
%str = external global [32 x sbyte] ; <[32 x sbyte]*> [#uses=0]
%str = external global [12 x sbyte] ; <[12 x sbyte]*> [#uses=0]
%C.0.2294 = external global %struct.charsequence ; <%struct.charsequence*> [#uses=3]
%t = external global %struct.trie_s* ; <%struct.trie_s**> [#uses=0]
%str = external global [3 x sbyte] ; <[3 x sbyte]*> [#uses=0]
%str = external global [26 x sbyte] ; <[26 x sbyte]*> [#uses=0]
%struct.FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct.FILE*, i32, i32, i32, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i8*, i8*, i32, i32, [40 x i8] }
%struct._IO_FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct.FILE*, i32, i32, i32, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i8*, i8*, i32, i32, [40 x i8] }
%struct._IO_marker = type { %struct._IO_marker*, %struct.FILE*, i32 }
%struct.charsequence = type { i8*, i32, i32 }
%struct.trie_s = type { [26 x %struct.trie_s*], i32 }
@str = external global [14 x i8] ; <[14 x i8]*> [#uses=0]
@str.upgrd.1 = external global [32 x i8] ; <[32 x i8]*> [#uses=0]
@str.upgrd.2 = external global [12 x i8] ; <[12 x i8]*> [#uses=0]
@C.0.2294 = external global %struct.charsequence ; <%struct.charsequence*> [#uses=3]
@t = external global %struct.trie_s* ; <%struct.trie_s**> [#uses=0]
@str.upgrd.3 = external global [3 x i8] ; <[3 x i8]*> [#uses=0]
@str.upgrd.4 = external global [26 x i8] ; <[26 x i8]*> [#uses=0]
implementation ; Functions:
declare void @charsequence_reset(%struct.charsequence*)
declare void %charsequence_reset(%struct.charsequence*)
declare void %free(sbyte*)
declare void %charsequence_push(%struct.charsequence*, sbyte)
declare sbyte* %charsequence_val(%struct.charsequence*)
declare int %_IO_getc(%struct.FILE*)
declare int %tolower(int)
declare %struct.trie_s* %trie_insert(%struct.trie_s*, sbyte*)
declare int %feof(%struct.FILE*)
declare void @free(i8*)
void %addfile(%struct.trie_s* %t, %struct.FILE* %f) {
declare void @charsequence_push(%struct.charsequence*, i8)
declare i8* @charsequence_val(%struct.charsequence*)
declare i32 @_IO_getc(%struct.FILE*)
declare i32 @tolower(i32)
declare %struct.trie_s* @trie_insert(%struct.trie_s*, i8*)
declare i32 @feof(%struct.FILE*)
define void @addfile(%struct.trie_s* %t, %struct.FILE* %f) {
entry:
%t_addr = alloca %struct.trie_s* ; <%struct.trie_s**> [#uses=2]
%f_addr = alloca %struct.FILE* ; <%struct.FILE**> [#uses=3]
%c = alloca sbyte, align 1 ; <sbyte*> [#uses=7]
%wstate = alloca int, align 4 ; <int*> [#uses=4]
%cs = alloca %struct.charsequence, align 16 ; <%struct.charsequence*> [#uses=7]
%str = alloca sbyte*, align 4 ; <sbyte**> [#uses=3]
"alloca point" = bitcast int 0 to int ; <int> [#uses=0]
store %struct.trie_s* %t, %struct.trie_s** %t_addr
store %struct.FILE* %f, %struct.FILE** %f_addr
store int 0, int* %wstate
%tmp = getelementptr %struct.charsequence* %cs, uint 0, uint 0 ; <sbyte**> [#uses=1]
%tmp1 = getelementptr %struct.charsequence* %C.0.2294, uint 0, uint 0 ; <sbyte**> [#uses=1]
%tmp = load sbyte** %tmp1 ; <sbyte*> [#uses=1]
store sbyte* %tmp, sbyte** %tmp
%tmp = getelementptr %struct.charsequence* %cs, uint 0, uint 1 ; <uint*> [#uses=1]
%tmp2 = getelementptr %struct.charsequence* %C.0.2294, uint 0, uint 1 ; <uint*> [#uses=1]
%tmp = load uint* %tmp2 ; <uint> [#uses=1]
store uint %tmp, uint* %tmp
%tmp3 = getelementptr %struct.charsequence* %cs, uint 0, uint 2 ; <uint*> [#uses=1]
%tmp4 = getelementptr %struct.charsequence* %C.0.2294, uint 0, uint 2 ; <uint*> [#uses=1]
%tmp5 = load uint* %tmp4 ; <uint> [#uses=1]
store uint %tmp5, uint* %tmp3
br label %bb33
bb: ; preds = %bb33
%tmp = load %struct.FILE** %f_addr ; <%struct.FILE*> [#uses=1]
%tmp = call int %_IO_getc( %struct.FILE* %tmp ) ; <int> [#uses=1]
%tmp6 = call int %tolower( int %tmp ) ; <int> [#uses=1]
%tmp6 = trunc int %tmp6 to sbyte ; <sbyte> [#uses=1]
store sbyte %tmp6, sbyte* %c
%tmp7 = load int* %wstate ; <int> [#uses=1]
%tmp = icmp ne int %tmp7, 0 ; <bool> [#uses=1]
br bool %tmp, label %cond_true, label %cond_false
cond_true: ; preds = %bb
%tmp = load sbyte* %c ; <sbyte> [#uses=1]
%tmp8 = icmp sle sbyte %tmp, 96 ; <bool> [#uses=1]
br bool %tmp8, label %cond_true9, label %cond_next
cond_true9: ; preds = %cond_true
br label %bb16
cond_next: ; preds = %cond_true
%tmp10 = load sbyte* %c ; <sbyte> [#uses=1]
%tmp11 = icmp sgt sbyte %tmp10, 122 ; <bool> [#uses=1]
br bool %tmp11, label %cond_true12, label %cond_next13
cond_true12: ; preds = %cond_next
br label %bb16
cond_next13: ; preds = %cond_next
%tmp14 = load sbyte* %c ; <sbyte> [#uses=1]
%tmp14 = sext sbyte %tmp14 to int ; <int> [#uses=1]
%tmp1415 = trunc int %tmp14 to sbyte ; <sbyte> [#uses=1]
call void %charsequence_push( %struct.charsequence* %cs, sbyte %tmp1415 )
br label %bb21
bb16: ; preds = %cond_true12, %cond_true9
%tmp17 = call sbyte* %charsequence_val( %struct.charsequence* %cs ) ; <sbyte*> [#uses=1]
store sbyte* %tmp17, sbyte** %str
%tmp = load %struct.trie_s** %t_addr ; <%struct.trie_s*> [#uses=1]
%tmp18 = load sbyte** %str ; <sbyte*> [#uses=1]
%tmp19 = call %struct.trie_s* %trie_insert( %struct.trie_s* %tmp, sbyte* %tmp18 ) ; <%struct.trie_s*> [#uses=0]
%tmp20 = load sbyte** %str ; <sbyte*> [#uses=1]
call void %free( sbyte* %tmp20 )
store int 0, int* %wstate
br label %bb21
bb21: ; preds = %bb16, %cond_next13
br label %cond_next32
cond_false: ; preds = %bb
%tmp22 = load sbyte* %c ; <sbyte> [#uses=1]
%tmp23 = icmp sgt sbyte %tmp22, 96 ; <bool> [#uses=1]
br bool %tmp23, label %cond_true24, label %cond_next31
cond_true24: ; preds = %cond_false
%tmp25 = load sbyte* %c ; <sbyte> [#uses=1]
%tmp26 = icmp sle sbyte %tmp25, 122 ; <bool> [#uses=1]
br bool %tmp26, label %cond_true27, label %cond_next30
cond_true27: ; preds = %cond_true24
call void %charsequence_reset( %struct.charsequence* %cs )
%tmp28 = load sbyte* %c ; <sbyte> [#uses=1]
%tmp28 = sext sbyte %tmp28 to int ; <int> [#uses=1]
%tmp2829 = trunc int %tmp28 to sbyte ; <sbyte> [#uses=1]
call void %charsequence_push( %struct.charsequence* %cs, sbyte %tmp2829 )
store int 1, int* %wstate
br label %cond_next30
cond_next30: ; preds = %cond_true27, %cond_true24
br label %cond_next31
cond_next31: ; preds = %cond_next30, %cond_false
br label %cond_next32
cond_next32: ; preds = %cond_next31, %bb21
br label %bb33
bb33: ; preds = %cond_next32, %entry
%tmp34 = load %struct.FILE** %f_addr ; <%struct.FILE*> [#uses=1]
%tmp35 = call int %feof( %struct.FILE* %tmp34 ) ; <int> [#uses=1]
%tmp36 = icmp eq int %tmp35, 0 ; <bool> [#uses=1]
br bool %tmp36, label %bb, label %bb37
bb37: ; preds = %bb33
br label %return
return: ; preds = %bb37
ret void
%t_addr = alloca %struct.trie_s* ; <%struct.trie_s**> [#uses=2]
%f_addr = alloca %struct.FILE* ; <%struct.FILE**> [#uses=3]
%c = alloca i8, align 1 ; <i8*> [#uses=7]
%wstate = alloca i32, align 4 ; <i32*> [#uses=4]
%cs = alloca %struct.charsequence, align 16 ; <%struct.charsequence*> [#uses=7]
%str = alloca i8*, align 4 ; <i8**> [#uses=3]
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
store %struct.trie_s* %t, %struct.trie_s** %t_addr
store %struct.FILE* %f, %struct.FILE** %f_addr
store i32 0, i32* %wstate
%tmp = getelementptr %struct.charsequence* %cs, i64 0, i32 0 ; <i8**> [#uses=1]
%tmp1 = getelementptr %struct.charsequence* @C.0.2294, i64 0, i32 0 ; <i8**> [#uses=1]
%tmp.upgrd.5 = load i8** %tmp1 ; <i8*> [#uses=1]
store i8* %tmp.upgrd.5, i8** %tmp
%tmp.upgrd.6 = getelementptr %struct.charsequence* %cs, i64 0, i32 1 ; <i32*> [#uses=1]
%tmp2 = getelementptr %struct.charsequence* @C.0.2294, i64 0, i32 1 ; <i32*> [#uses=1]
%tmp.upgrd.7 = load i32* %tmp2 ; <i32> [#uses=1]
store i32 %tmp.upgrd.7, i32* %tmp.upgrd.6
%tmp3 = getelementptr %struct.charsequence* %cs, i64 0, i32 2 ; <i32*> [#uses=1]
%tmp4 = getelementptr %struct.charsequence* @C.0.2294, i64 0, i32 2 ; <i32*> [#uses=1]
%tmp5 = load i32* %tmp4 ; <i32> [#uses=1]
store i32 %tmp5, i32* %tmp3
br label %bb33
bb: ; preds = %bb33
%tmp.upgrd.8 = load %struct.FILE** %f_addr ; <%struct.FILE*> [#uses=1]
%tmp.upgrd.9 = call i32 @_IO_getc( %struct.FILE* %tmp.upgrd.8 ) ; <i32> [#uses=1]
%tmp6 = call i32 @tolower( i32 %tmp.upgrd.9 ) ; <i32> [#uses=1]
%tmp6.upgrd.10 = trunc i32 %tmp6 to i8 ; <i8> [#uses=1]
store i8 %tmp6.upgrd.10, i8* %c
%tmp7 = load i32* %wstate ; <i32> [#uses=1]
%tmp.upgrd.11 = icmp ne i32 %tmp7, 0 ; <i1> [#uses=1]
br i1 %tmp.upgrd.11, label %cond_true, label %cond_false
cond_true: ; preds = %bb
%tmp.upgrd.12 = load i8* %c ; <i8> [#uses=1]
%tmp8 = icmp sle i8 %tmp.upgrd.12, 96 ; <i1> [#uses=1]
br i1 %tmp8, label %cond_true9, label %cond_next
cond_true9: ; preds = %cond_true
br label %bb16
cond_next: ; preds = %cond_true
%tmp10 = load i8* %c ; <i8> [#uses=1]
%tmp11 = icmp sgt i8 %tmp10, 122 ; <i1> [#uses=1]
br i1 %tmp11, label %cond_true12, label %cond_next13
cond_true12: ; preds = %cond_next
br label %bb16
cond_next13: ; preds = %cond_next
%tmp14 = load i8* %c ; <i8> [#uses=1]
%tmp14.upgrd.13 = sext i8 %tmp14 to i32 ; <i32> [#uses=1]
%tmp1415 = trunc i32 %tmp14.upgrd.13 to i8 ; <i8> [#uses=1]
call void @charsequence_push( %struct.charsequence* %cs, i8 %tmp1415 )
br label %bb21
bb16: ; preds = %cond_true12, %cond_true9
%tmp17 = call i8* @charsequence_val( %struct.charsequence* %cs ) ; <i8*> [#uses=1]
store i8* %tmp17, i8** %str
%tmp.upgrd.14 = load %struct.trie_s** %t_addr ; <%struct.trie_s*> [#uses=1]
%tmp18 = load i8** %str ; <i8*> [#uses=1]
%tmp19 = call %struct.trie_s* @trie_insert( %struct.trie_s* %tmp.upgrd.14, i8* %tmp18 ) ; <%struct.trie_s*> [#uses=0]
%tmp20 = load i8** %str ; <i8*> [#uses=1]
call void @free( i8* %tmp20 )
store i32 0, i32* %wstate
br label %bb21
bb21: ; preds = %bb16, %cond_next13
br label %cond_next32
cond_false: ; preds = %bb
%tmp22 = load i8* %c ; <i8> [#uses=1]
%tmp23 = icmp sgt i8 %tmp22, 96 ; <i1> [#uses=1]
br i1 %tmp23, label %cond_true24, label %cond_next31
cond_true24: ; preds = %cond_false
%tmp25 = load i8* %c ; <i8> [#uses=1]
%tmp26 = icmp sle i8 %tmp25, 122 ; <i1> [#uses=1]
br i1 %tmp26, label %cond_true27, label %cond_next30
cond_true27: ; preds = %cond_true24
call void @charsequence_reset( %struct.charsequence* %cs )
%tmp28 = load i8* %c ; <i8> [#uses=1]
%tmp28.upgrd.15 = sext i8 %tmp28 to i32 ; <i32> [#uses=1]
%tmp2829 = trunc i32 %tmp28.upgrd.15 to i8 ; <i8> [#uses=1]
call void @charsequence_push( %struct.charsequence* %cs, i8 %tmp2829 )
store i32 1, i32* %wstate
br label %cond_next30
cond_next30: ; preds = %cond_true27, %cond_true24
br label %cond_next31
cond_next31: ; preds = %cond_next30, %cond_false
br label %cond_next32
cond_next32: ; preds = %cond_next31, %bb21
br label %bb33
bb33: ; preds = %cond_next32, %entry
%tmp34 = load %struct.FILE** %f_addr ; <%struct.FILE*> [#uses=1]
%tmp35 = call i32 @feof( %struct.FILE* %tmp34 ) ; <i32> [#uses=1]
%tmp36 = icmp eq i32 %tmp35, 0 ; <i1> [#uses=1]
br i1 %tmp36, label %bb, label %bb37
bb37: ; preds = %bb33
br label %return
return: ; preds = %bb37
ret void
}

View File

@ -1,10 +1,11 @@
; RUN: llvm-upgrade < %s | llvm-as | opt -simplify-libcalls -disable-output
; RUN: llvm-as < %s | opt -simplify-libcalls -disable-output
%G = constant [3 x sbyte] c"%s\00"
@G = constant [3 x i8] c"%s\00" ; <[3 x i8]*> [#uses=1]
declare int %sprintf(sbyte*, sbyte*, ...)
declare i32 @sprintf(i8*, i8*, ...)
void %foo(sbyte*%P, int *%X) {
call int(sbyte*,sbyte*, ...)* %sprintf(sbyte* %P, sbyte* getelementptr ([3 x sbyte]* %G, int 0, int 0), int* %X)
ret void
define void @foo(i8* %P, i32* %X) {
call i32 (i8*, i8*, ...)* @sprintf( i8* %P, i8* getelementptr ([3 x i8]* @G, i32 0, i32 0), i32* %X ) ; <i32>:1 [#uses=0]
ret void
}

View File

@ -1,15 +1,15 @@
; Test that the ExitInMainOptimization pass works correctly
; RUN: llvm-upgrade < %s | llvm-as | opt -simplify-libcalls | llvm-dis | \
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis | \
; RUN: grep {ret i32 3} | count 1
; END.
declare void %exit(int)
declare void %exitonly(int)
declare void @exit(i32)
implementation ; Functions:
declare void @exitonly(i32)
int %main () {
call void %exitonly ( int 3 )
call void %exit ( int 3 )
ret int 0
define i32 @main() {
call void @exitonly( i32 3 )
call void @exit( i32 3 )
ret i32 0
}

View File

@ -1,29 +1,30 @@
; Test that the ToAsciiOptimizer works correctly
; RUN: llvm-upgrade < %s | llvm-as | opt -simplify-libcalls | llvm-dis | \
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis | \
; RUN: not grep {call.*%ffs}
declare int %ffs(int)
declare int %ffsl(int)
declare int %ffsll(long)
@non_const = external global i32 ; <i32*> [#uses=1]
%non_const = external global int
declare i32 @ffs(i32)
implementation ; Functions:
declare i32 @ffsl(i32)
int %main () {
%arg = load int* %non_const
%val0 = call int %ffs(int %arg)
%val1 = call int %ffs(int 1)
%val2 = call int %ffs(int 2048)
%val3 = call int %ffsl(int 65536)
%val4 = call int %ffsll(long 1024)
%val5 = call int %ffsll(long 17179869184)
%val6 = call int %ffsll(long 1152921504606846976)
%rslt1 = add int %val1, %val2
%rslt2 = add int %val3, %val4
%rslt3 = add int %val5, %val6
%rslt4 = add int %rslt1, %rslt2
%rslt5 = add int %rslt4, %rslt3
%rslt6 = add int %rslt5, %val0
ret int %rslt5
declare i32 @ffsll(i64)
define i32 @main() {
%arg = load i32* @non_const ; <i32> [#uses=1]
%val0 = call i32 @ffs( i32 %arg ) ; <i32> [#uses=1]
%val1 = call i32 @ffs( i32 1 ) ; <i32> [#uses=1]
%val2 = call i32 @ffs( i32 2048 ) ; <i32> [#uses=1]
%val3 = call i32 @ffsl( i32 65536 ) ; <i32> [#uses=1]
%val4 = call i32 @ffsll( i64 1024 ) ; <i32> [#uses=1]
%val5 = call i32 @ffsll( i64 17179869184 ) ; <i32> [#uses=1]
%val6 = call i32 @ffsll( i64 1152921504606846976 ) ; <i32> [#uses=1]
%rslt1 = add i32 %val1, %val2 ; <i32> [#uses=1]
%rslt2 = add i32 %val3, %val4 ; <i32> [#uses=1]
%rslt3 = add i32 %val5, %val6 ; <i32> [#uses=1]
%rslt4 = add i32 %rslt1, %rslt2 ; <i32> [#uses=1]
%rslt5 = add i32 %rslt4, %rslt3 ; <i32> [#uses=2]
%rslt6 = add i32 %rslt5, %val0 ; <i32> [#uses=0]
ret i32 %rslt5
}

View File

@ -1,29 +1,25 @@
; Test that the FPrintFOptimizer works correctly
; RUN: llvm-upgrade < %s | llvm-as | opt -simplify-libcalls | llvm-dis | \
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis | \
; RUN: not grep {call.*fprintf}
;
%struct._IO_FILE = type { int, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, %struct._IO_marker*, %struct._IO_FILE*, int, int, int, ushort, sbyte, [1 x sbyte], sbyte*, long, sbyte*, sbyte*, int, [52 x sbyte] }
%struct._IO_marker = type { %struct._IO_marker*, %struct._IO_FILE*, int }
%struct._IO_FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct._IO_FILE*, i32, i32, i32, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i32, [52 x i8] }
%struct._IO_marker = type { %struct._IO_marker*, %struct._IO_FILE*, i32 }
@str = constant [3 x i8] c"%s\00" ; <[3 x i8]*> [#uses=1]
@chr = constant [3 x i8] c"%c\00" ; <[3 x i8]*> [#uses=1]
@hello = constant [13 x i8] c"hello world\0A\00" ; <[13 x i8]*> [#uses=1]
@stdout = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=3]
%str = constant [3 x sbyte] c"%s\00"
%chr = constant [3 x sbyte] c"%c\00"
%hello = constant [13 x sbyte] c"hello world\0A\00"
%stdout = external global %struct._IO_FILE*
declare i32 @fprintf(%struct._IO_FILE*, i8*, ...)
declare int %fprintf(%struct._IO_FILE*, sbyte*, ...)
implementation
int %foo()
{
define i32 @foo() {
entry:
%tmp.1 = load %struct._IO_FILE** %stdout
%tmp.0 = call int (%struct._IO_FILE*, sbyte*, ...)* %fprintf( %struct._IO_FILE* %tmp.1, sbyte* getelementptr ([13 x sbyte]* %hello, int 0, int 0) )
%tmp.4 = load %struct._IO_FILE** %stdout
%tmp.3 = call int (%struct._IO_FILE*, sbyte*, ...)* %fprintf( %struct._IO_FILE* %tmp.4, sbyte* getelementptr ([3 x sbyte]* %str, int 0, int 0), sbyte* getelementptr ([13 x sbyte]* %hello, int 0, int 0) )
%tmp.8 = load %struct._IO_FILE** %stdout
%tmp.7 = call int (%struct._IO_FILE*, sbyte*, ...)* %fprintf( %struct._IO_FILE* %tmp.8, sbyte* getelementptr ([3 x sbyte]* %chr, int 0, int 0), int 33 )
ret int 0
%tmp.1 = load %struct._IO_FILE** @stdout ; <%struct._IO_FILE*> [#uses=1]
%tmp.0 = call i32 (%struct._IO_FILE*, i8*, ...)* @fprintf( %struct._IO_FILE* %tmp.1, i8* getelementptr ([13 x i8]* @hello, i32 0, i32 0) ) ; <i32> [#uses=0]
%tmp.4 = load %struct._IO_FILE** @stdout ; <%struct._IO_FILE*> [#uses=1]
%tmp.3 = call i32 (%struct._IO_FILE*, i8*, ...)* @fprintf( %struct._IO_FILE* %tmp.4, i8* getelementptr ([3 x i8]* @str, i32 0, i32 0), i8* getelementptr ([13 x i8]* @hello, i32 0, i32 0) ) ; <i32> [#uses=0]
%tmp.8 = load %struct._IO_FILE** @stdout ; <%struct._IO_FILE*> [#uses=1]
%tmp.7 = call i32 (%struct._IO_FILE*, i8*, ...)* @fprintf( %struct._IO_FILE* %tmp.8, i8* getelementptr ([3 x i8]* @chr, i32 0, i32 0), i32 33 ) ; <i32> [#uses=0]
ret i32 0
}

View File

@ -1,21 +1,21 @@
; Test that the IsDigitOptimizer works correctly
; RUN: llvm-upgrade < %s | llvm-as | opt -simplify-libcalls | llvm-dis | \
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis | \
; RUN: not grep call
declare int %isdigit(int)
declare int %isascii(int)
declare i32 @isdigit(i32)
implementation ; Functions:
declare i32 @isascii(i32)
int %main () {
%val1 = call int %isdigit(int 47)
%val2 = call int %isdigit(int 48)
%val3 = call int %isdigit(int 57)
%val4 = call int %isdigit(int 58)
%rslt1 = add int %val1, %val2
%rslt2 = add int %val3, %val4
%sum = add int %rslt1, %rslt2
%rslt = call int %isdigit(int %sum)
%tmp = call int %isascii(int %rslt)
ret int %tmp
define i32 @main() {
%val1 = call i32 @isdigit( i32 47 ) ; <i32> [#uses=1]
%val2 = call i32 @isdigit( i32 48 ) ; <i32> [#uses=1]
%val3 = call i32 @isdigit( i32 57 ) ; <i32> [#uses=1]
%val4 = call i32 @isdigit( i32 58 ) ; <i32> [#uses=1]
%rslt1 = add i32 %val1, %val2 ; <i32> [#uses=1]
%rslt2 = add i32 %val3, %val4 ; <i32> [#uses=1]
%sum = add i32 %rslt1, %rslt2 ; <i32> [#uses=1]
%rslt = call i32 @isdigit( i32 %sum ) ; <i32> [#uses=1]
%tmp = call i32 @isascii( i32 %rslt ) ; <i32> [#uses=1]
ret i32 %tmp
}

View File

@ -1,22 +1,22 @@
; Test that the StrCatOptimizer works correctly
; RUN: llvm-upgrade < %s | llvm-as | opt -constprop -simplify-libcalls | \
; RUN: llvm-as < %s | opt -constprop -simplify-libcalls | \
; RUN: llvm-dis | not grep {call.*llvm.memcpy.i32}
declare void %llvm.memcpy.i32(sbyte*,sbyte*,uint,uint)
%h = constant [2 x sbyte] c"h\00"
%hel = constant [4 x sbyte] c"hel\00"
%hello_u = constant [8 x sbyte] c"hello_u\00"
@h = constant [2 x i8] c"h\00" ; <[2 x i8]*> [#uses=1]
@hel = constant [4 x i8] c"hel\00" ; <[4 x i8]*> [#uses=1]
@hello_u = constant [8 x i8] c"hello_u\00" ; <[8 x i8]*> [#uses=1]
implementation ; Functions:
declare void @llvm.memcpy.i32(i8*, i8*, i32, i32)
int %main () {
%h_p = getelementptr [2 x sbyte]* %h, int 0, int 0
%hel_p = getelementptr [4 x sbyte]* %hel, int 0, int 0
%hello_u_p = getelementptr [8 x sbyte]* %hello_u, int 0, int 0
%target = alloca [1024 x sbyte]
%target_p = getelementptr [1024 x sbyte]* %target, int 0, int 0
call void %llvm.memcpy.i32(sbyte* %target_p, sbyte* %h_p, uint 2, uint 2)
call void %llvm.memcpy.i32(sbyte* %target_p, sbyte* %hel_p, uint 4, uint 4)
call void %llvm.memcpy.i32(sbyte* %target_p, sbyte* %hello_u_p, uint 8, uint 8)
ret int 0
define i32 @main() {
%h_p = getelementptr [2 x i8]* @h, i32 0, i32 0 ; <i8*> [#uses=1]
%hel_p = getelementptr [4 x i8]* @hel, i32 0, i32 0 ; <i8*> [#uses=1]
%hello_u_p = getelementptr [8 x i8]* @hello_u, i32 0, i32 0 ; <i8*> [#uses=1]
%target = alloca [1024 x i8] ; <[1024 x i8]*> [#uses=1]
%target_p = getelementptr [1024 x i8]* %target, i32 0, i32 0 ; <i8*> [#uses=3]
call void @llvm.memcpy.i32( i8* %target_p, i8* %h_p, i32 2, i32 2 )
call void @llvm.memcpy.i32( i8* %target_p, i8* %hel_p, i32 4, i32 4 )
call void @llvm.memcpy.i32( i8* %target_p, i8* %hello_u_p, i32 8, i32 8 )
ret i32 0
}

View File

@ -1,22 +1,22 @@
; Test that the StrCatOptimizer works correctly
; RUN: llvm-upgrade < %s | llvm-as | opt -constprop -simplify-libcalls | \
; RUN: llvm-as < %s | opt -constprop -simplify-libcalls | \
; RUN: llvm-dis | not grep {call.*llvm.memmove.i32}
declare void %llvm.memmove.i32(sbyte*,sbyte*,uint,uint)
%h = constant [2 x sbyte] c"h\00"
%hel = constant [4 x sbyte] c"hel\00"
%hello_u = constant [8 x sbyte] c"hello_u\00"
@h = constant [2 x i8] c"h\00" ; <[2 x i8]*> [#uses=1]
@hel = constant [4 x i8] c"hel\00" ; <[4 x i8]*> [#uses=1]
@hello_u = constant [8 x i8] c"hello_u\00" ; <[8 x i8]*> [#uses=1]
implementation ; Functions:
declare void @llvm.memmove.i32(i8*, i8*, i32, i32)
int %main () {
%h_p = getelementptr [2 x sbyte]* %h, int 0, int 0
%hel_p = getelementptr [4 x sbyte]* %hel, int 0, int 0
%hello_u_p = getelementptr [8 x sbyte]* %hello_u, int 0, int 0
%target = alloca [1024 x sbyte]
%target_p = getelementptr [1024 x sbyte]* %target, int 0, int 0
call void %llvm.memmove.i32(sbyte* %target_p, sbyte* %h_p, uint 2, uint 2)
call void %llvm.memmove.i32(sbyte* %target_p, sbyte* %hel_p, uint 4, uint 4)
call void %llvm.memmove.i32(sbyte* %target_p, sbyte* %hello_u_p, uint 8, uint 8)
ret int 0
define i32 @main() {
%h_p = getelementptr [2 x i8]* @h, i32 0, i32 0 ; <i8*> [#uses=1]
%hel_p = getelementptr [4 x i8]* @hel, i32 0, i32 0 ; <i8*> [#uses=1]
%hello_u_p = getelementptr [8 x i8]* @hello_u, i32 0, i32 0 ; <i8*> [#uses=1]
%target = alloca [1024 x i8] ; <[1024 x i8]*> [#uses=1]
%target_p = getelementptr [1024 x i8]* %target, i32 0, i32 0 ; <i8*> [#uses=3]
call void @llvm.memmove.i32( i8* %target_p, i8* %h_p, i32 2, i32 2 )
call void @llvm.memmove.i32( i8* %target_p, i8* %hel_p, i32 4, i32 4 )
call void @llvm.memmove.i32( i8* %target_p, i8* %hello_u_p, i32 8, i32 8 )
ret i32 0
}

View File

@ -1,19 +1,18 @@
; Test that the LLVMMemSetOptimizer works correctly
; RUN: llvm-upgrade < %s | llvm-as | opt -simplify-libcalls | llvm-dis | \
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis | \
; RUN: not grep {call.*llvm.memset}
; END.
declare void %llvm.memset.i32(sbyte*,ubyte,uint,uint)
declare void @llvm.memset.i32(i8*, i8, i32, i32)
implementation ; Functions:
int %main () {
%target = alloca [1024 x sbyte]
%target_p = getelementptr [1024 x sbyte]* %target, int 0, int 0
call void %llvm.memset.i32(sbyte* %target_p, ubyte 1, uint 0, uint 1)
call void %llvm.memset.i32(sbyte* %target_p, ubyte 1, uint 1, uint 1)
call void %llvm.memset.i32(sbyte* %target_p, ubyte 1, uint 2, uint 2)
call void %llvm.memset.i32(sbyte* %target_p, ubyte 1, uint 4, uint 4)
call void %llvm.memset.i32(sbyte* %target_p, ubyte 1, uint 8, uint 8)
ret int 0
define i32 @main() {
%target = alloca [1024 x i8] ; <[1024 x i8]*> [#uses=1]
%target_p = getelementptr [1024 x i8]* %target, i32 0, i32 0 ; <i8*> [#uses=5]
call void @llvm.memset.i32( i8* %target_p, i8 1, i32 0, i32 1 )
call void @llvm.memset.i32( i8* %target_p, i8 1, i32 1, i32 1 )
call void @llvm.memset.i32( i8* %target_p, i8 1, i32 2, i32 2 )
call void @llvm.memset.i32( i8* %target_p, i8 1, i32 4, i32 4 )
call void @llvm.memset.i32( i8* %target_p, i8 1, i32 8, i32 8 )
ret i32 0
}

View File

@ -1,24 +1,24 @@
; Testcase for calls to the standard C "pow" function
;
; Equivalent to: http://gcc.gnu.org/ml/gcc-patches/2003-02/msg01786.html
; RUN: llvm-upgrade < %s | llvm-as | opt -simplify-libcalls | llvm-dis | \
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis | \
; RUN: not grep {call double .pow}
; END.
declare double %pow(double, double)
declare double @pow(double, double)
double %test1(double %X) {
%Y = call double %pow(double %X, double 0.0)
ret double %Y ; x^0.0 always equals 1.0
define double @test1(double %X) {
%Y = call double @pow( double %X, double 0.000000e+00 ) ; <double> [#uses=1]
ret double %Y
}
double %test2(double %X) {
%Y = call double %pow(double %X, double -0.0)
ret double %Y ; x^-0.0 always equals 1.0
define double @test2(double %X) {
%Y = call double @pow( double %X, double -0.000000e+00 ) ; <double> [#uses=1]
ret double %Y
}
double %test3(double %X) {
%Y = call double %pow(double 1.0, double %X)
ret double %Y ; 1.0^x always equals 1.0
define double @test3(double %X) {
%Y = call double @pow( double 1.000000e+00, double %X ) ; <double> [#uses=1]
ret double %Y
}

View File

@ -1,27 +1,26 @@
; Test that the PutsCatOptimizer works correctly
; RUN: llvm-upgrade < %s | llvm-as | opt -simplify-libcalls | llvm-dis | \
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis | \
; RUN: not grep {call.*fputs}
;
%struct._IO_FILE = type { int, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, sbyte*, %struct._IO_marker*, %struct._IO_FILE*, int, int, int, ushort, sbyte, [1 x sbyte], sbyte*, long, sbyte*, sbyte*, int, [52 x sbyte] }
%struct._IO_marker = type { %struct._IO_marker*, %struct._IO_FILE*, int }
%stdout = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=1]
declare int %fputs(sbyte*, %struct._IO_FILE*)
%struct._IO_FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct._IO_FILE*, i32, i32, i32, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i32, [52 x i8] }
%struct._IO_marker = type { %struct._IO_marker*, %struct._IO_FILE*, i32 }
@stdout = external global %struct._IO_FILE* ; <%struct._IO_FILE**> [#uses=1]
@empty = constant [1 x i8] zeroinitializer ; <[1 x i8]*> [#uses=1]
@len1 = constant [2 x i8] c"A\00" ; <[2 x i8]*> [#uses=1]
@long = constant [7 x i8] c"hello\0A\00" ; <[7 x i8]*> [#uses=1]
%empty = constant [1 x sbyte] c"\00"
%len1 = constant [2 x sbyte] c"A\00"
%long = constant [7 x sbyte] c"hello\0A\00"
declare i32 @fputs(i8*, %struct._IO_FILE*)
implementation ; Functions:
int %main() {
define i32 @main() {
entry:
%out = load %struct._IO_FILE** %stdout
%s1 = getelementptr [1 x sbyte]* %empty, int 0, int 0
%s2 = getelementptr [2 x sbyte]* %len1, int 0, int 0
%s3 = getelementptr [7 x sbyte]* %long, int 0, int 0
%a = call int %fputs( sbyte* %s1, %struct._IO_FILE* %out )
%b = call int %fputs( sbyte* %s2, %struct._IO_FILE* %out )
%c = call int %fputs( sbyte* %s3, %struct._IO_FILE* %out )
ret int 0
%out = load %struct._IO_FILE** @stdout ; <%struct._IO_FILE*> [#uses=3]
%s1 = getelementptr [1 x i8]* @empty, i32 0, i32 0 ; <i8*> [#uses=1]
%s2 = getelementptr [2 x i8]* @len1, i32 0, i32 0 ; <i8*> [#uses=1]
%s3 = getelementptr [7 x i8]* @long, i32 0, i32 0 ; <i8*> [#uses=1]
%a = call i32 @fputs( i8* %s1, %struct._IO_FILE* %out ) ; <i32> [#uses=0]
%b = call i32 @fputs( i8* %s2, %struct._IO_FILE* %out ) ; <i32> [#uses=0]
%c = call i32 @fputs( i8* %s3, %struct._IO_FILE* %out ) ; <i32> [#uses=0]
ret i32 0
}

View File

@ -1,36 +1,36 @@
; Test that the SPrintFOptimizer works correctly
; RUN: llvm-upgrade < %s | llvm-as | opt -simplify-libcalls | llvm-dis | \
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis | \
; RUN: not grep {call.*sprintf}
declare int %sprintf(sbyte*,sbyte*,...)
declare int %puts(sbyte*)
%hello = constant [6 x sbyte] c"hello\00"
%null = constant [1 x sbyte] c"\00"
%null_hello = constant [7 x sbyte] c"\00hello\00"
%fmt1 = constant [3 x sbyte] c"%s\00"
%fmt2 = constant [3 x sbyte] c"%c\00"
@hello = constant [6 x i8] c"hello\00" ; <[6 x i8]*> [#uses=1]
@null = constant [1 x i8] zeroinitializer ; <[1 x i8]*> [#uses=1]
@null_hello = constant [7 x i8] c"\00hello\00" ; <[7 x i8]*> [#uses=1]
@fmt1 = constant [3 x i8] c"%s\00" ; <[3 x i8]*> [#uses=1]
@fmt2 = constant [3 x i8] c"%c\00" ; <[3 x i8]*> [#uses=1]
implementation ; Functions:
declare i32 @sprintf(i8*, i8*, ...)
int %foo (sbyte* %p) {
%target = alloca [1024 x sbyte]
%target_p = getelementptr [1024 x sbyte]* %target, int 0, int 0
%hello_p = getelementptr [6 x sbyte]* %hello, int 0, int 0
%null_p = getelementptr [1 x sbyte]* %null, int 0, int 0
%nh_p = getelementptr [7 x sbyte]* %null_hello, int 0, int 0
%fmt1_p = getelementptr [3 x sbyte]* %fmt1, int 0, int 0
%fmt2_p = getelementptr [3 x sbyte]* %fmt2, int 0, int 0
store sbyte 0, sbyte* %target_p
%r1 = call int (sbyte*,sbyte*,...)* %sprintf(sbyte* %target_p, sbyte* %hello_p)
%r2 = call int (sbyte*,sbyte*,...)* %sprintf(sbyte* %target_p, sbyte* %null_p)
%r3 = call int (sbyte*,sbyte*,...)* %sprintf(sbyte* %target_p, sbyte* %nh_p)
%r4 = call int (sbyte*,sbyte*,...)* %sprintf(sbyte* %target_p, sbyte* %fmt1_p, sbyte* %hello_p)
%r4.1 = call int (sbyte*,sbyte*,...)* %sprintf(sbyte* %target_p, sbyte* %fmt1_p, sbyte* %p)
%r5 = call int (sbyte*,sbyte*,...)* %sprintf(sbyte* %target_p, sbyte* %fmt2_p, int 82)
%r6 = add int %r1, %r2
%r7 = add int %r3, %r6
%r8 = add int %r5, %r7
%r9 = add int %r8, %r4
%r10 = add int %r9, %r4.1
ret int %r10
declare i32 @puts(i8*)
define i32 @foo(i8* %p) {
%target = alloca [1024 x i8] ; <[1024 x i8]*> [#uses=1]
%target_p = getelementptr [1024 x i8]* %target, i32 0, i32 0 ; <i8*> [#uses=7]
%hello_p = getelementptr [6 x i8]* @hello, i32 0, i32 0 ; <i8*> [#uses=2]
%null_p = getelementptr [1 x i8]* @null, i32 0, i32 0 ; <i8*> [#uses=1]
%nh_p = getelementptr [7 x i8]* @null_hello, i32 0, i32 0 ; <i8*> [#uses=1]
%fmt1_p = getelementptr [3 x i8]* @fmt1, i32 0, i32 0 ; <i8*> [#uses=2]
%fmt2_p = getelementptr [3 x i8]* @fmt2, i32 0, i32 0 ; <i8*> [#uses=1]
store i8 0, i8* %target_p
%r1 = call i32 (i8*, i8*, ...)* @sprintf( i8* %target_p, i8* %hello_p ) ; <i32> [#uses=1]
%r2 = call i32 (i8*, i8*, ...)* @sprintf( i8* %target_p, i8* %null_p ) ; <i32> [#uses=1]
%r3 = call i32 (i8*, i8*, ...)* @sprintf( i8* %target_p, i8* %nh_p ) ; <i32> [#uses=1]
%r4 = call i32 (i8*, i8*, ...)* @sprintf( i8* %target_p, i8* %fmt1_p, i8* %hello_p ) ; <i32> [#uses=1]
%r4.1 = call i32 (i8*, i8*, ...)* @sprintf( i8* %target_p, i8* %fmt1_p, i8* %p ) ; <i32> [#uses=1]
%r5 = call i32 (i8*, i8*, ...)* @sprintf( i8* %target_p, i8* %fmt2_p, i32 82 ) ; <i32> [#uses=1]
%r6 = add i32 %r1, %r2 ; <i32> [#uses=1]
%r7 = add i32 %r3, %r6 ; <i32> [#uses=1]
%r8 = add i32 %r5, %r7 ; <i32> [#uses=1]
%r9 = add i32 %r8, %r4 ; <i32> [#uses=1]
%r10 = add i32 %r9, %r4.1 ; <i32> [#uses=1]
ret i32 %r10
}

View File

@ -1,25 +1,26 @@
; Test that the StrCatOptimizer works correctly
; RUN: llvm-upgrade < %s | llvm-as | opt -simplify-libcalls | llvm-dis | \
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis | \
; RUN: not grep {call.*strcat}
declare sbyte* %strcat(sbyte*,sbyte*)
declare int %puts(sbyte*)
%hello = constant [6 x sbyte] c"hello\00"
%null = constant [1 x sbyte] c"\00"
%null_hello = constant [7 x sbyte] c"\00hello\00"
@hello = constant [6 x i8] c"hello\00" ; <[6 x i8]*> [#uses=1]
@null = constant [1 x i8] zeroinitializer ; <[1 x i8]*> [#uses=1]
@null_hello = constant [7 x i8] c"\00hello\00" ; <[7 x i8]*> [#uses=1]
implementation ; Functions:
declare i8* @strcat(i8*, i8*)
int %main () {
%target = alloca [1024 x sbyte]
%arg1 = getelementptr [1024 x sbyte]* %target, int 0, int 0
store sbyte 0, sbyte* %arg1
%arg2 = getelementptr [6 x sbyte]* %hello, int 0, int 0
%rslt1 = call sbyte* %strcat(sbyte* %arg1, sbyte* %arg2)
%arg3 = getelementptr [1 x sbyte]* %null, int 0, int 0
%rslt2 = call sbyte* %strcat(sbyte* %rslt1, sbyte* %arg3)
%arg4 = getelementptr [7 x sbyte]* %null_hello, int 0, int 0
%rslt3 = call sbyte* %strcat(sbyte* %rslt2, sbyte* %arg4)
call int %puts(sbyte* %rslt3)
ret int 0
declare i32 @puts(i8*)
define i32 @main() {
%target = alloca [1024 x i8] ; <[1024 x i8]*> [#uses=1]
%arg1 = getelementptr [1024 x i8]* %target, i32 0, i32 0 ; <i8*> [#uses=2]
store i8 0, i8* %arg1
%arg2 = getelementptr [6 x i8]* @hello, i32 0, i32 0 ; <i8*> [#uses=1]
%rslt1 = call i8* @strcat( i8* %arg1, i8* %arg2 ) ; <i8*> [#uses=1]
%arg3 = getelementptr [1 x i8]* @null, i32 0, i32 0 ; <i8*> [#uses=1]
%rslt2 = call i8* @strcat( i8* %rslt1, i8* %arg3 ) ; <i8*> [#uses=1]
%arg4 = getelementptr [7 x i8]* @null_hello, i32 0, i32 0 ; <i8*> [#uses=1]
%rslt3 = call i8* @strcat( i8* %rslt2, i8* %arg4 ) ; <i8*> [#uses=1]
call i32 @puts( i8* %rslt3 ) ; <i32>:1 [#uses=0]
ret i32 0
}

View File

@ -1,22 +1,22 @@
; Test that the StrChrOptimizer works correctly
; RUN: llvm-upgrade < %s | llvm-as | opt -simplify-libcalls | llvm-dis | \
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis | \
; RUN: not grep {call.*%strchr}
declare sbyte* %strchr(sbyte*,int)
declare int %puts(sbyte*)
%hello = constant [14 x sbyte] c"hello world\n\00"
%null = constant [1 x sbyte] c"\00"
@hello = constant [14 x i8] c"hello world\5Cn\00" ; <[14 x i8]*> [#uses=1]
@null = constant [1 x i8] zeroinitializer ; <[1 x i8]*> [#uses=1]
implementation ; Functions:
declare i8* @strchr(i8*, i32)
int %main () {
%hello_p = getelementptr [14 x sbyte]* %hello, int 0, int 0
%null_p = getelementptr [1 x sbyte]* %null, int 0, int 0
declare i32 @puts(i8*)
%world = call sbyte* %strchr(sbyte* %hello_p, int 119 )
%ignore = call sbyte* %strchr(sbyte* %null_p, int 119 )
%len = call int %puts(sbyte* %world)
%index = add int %len, 112
%result = call sbyte* %strchr(sbyte* %hello_p, int %index)
ret int %index
define i32 @main() {
%hello_p = getelementptr [14 x i8]* @hello, i32 0, i32 0 ; <i8*> [#uses=2]
%null_p = getelementptr [1 x i8]* @null, i32 0, i32 0 ; <i8*> [#uses=1]
%world = call i8* @strchr( i8* %hello_p, i32 119 ) ; <i8*> [#uses=1]
%ignore = call i8* @strchr( i8* %null_p, i32 119 ) ; <i8*> [#uses=0]
%len = call i32 @puts( i8* %world ) ; <i32> [#uses=1]
%index = add i32 %len, 112 ; <i32> [#uses=2]
%result = call i8* @strchr( i8* %hello_p, i32 %index ) ; <i8*> [#uses=0]
ret i32 %index
}

View File

@ -1,27 +1,28 @@
; Test that the StrCmpOptimizer works correctly
; RUN: llvm-upgrade < %s | llvm-as | opt -simplify-libcalls | llvm-dis | \
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis | \
; RUN: not grep {call.*strcmp}
declare int %strcmp(sbyte*,sbyte*)
declare int %puts(sbyte*)
%hello = constant [6 x sbyte] c"hello\00"
%hell = constant [5 x sbyte] c"hell\00"
%null = constant [1 x sbyte] c"\00"
@hello = constant [6 x i8] c"hello\00" ; <[6 x i8]*> [#uses=1]
@hell = constant [5 x i8] c"hell\00" ; <[5 x i8]*> [#uses=1]
@null = constant [1 x i8] zeroinitializer ; <[1 x i8]*> [#uses=1]
implementation ; Functions:
declare i32 @strcmp(i8*, i8*)
int %main () {
%hello_p = getelementptr [6 x sbyte]* %hello, int 0, int 0
%hell_p = getelementptr [5 x sbyte]* %hell, int 0, int 0
%null_p = getelementptr [1 x sbyte]* %null, int 0, int 0
%temp1 = call int %strcmp(sbyte* %hello_p, sbyte* %hello_p)
%temp2 = call int %strcmp(sbyte* %null_p, sbyte* %null_p)
%temp3 = call int %strcmp(sbyte* %hello_p, sbyte* %null_p)
%temp4 = call int %strcmp(sbyte* %null_p, sbyte* %hello_p)
%temp5 = call int %strcmp(sbyte* %hell_p, sbyte* %hello_p)
%rslt1 = add int %temp1, %temp2
%rslt2 = add int %rslt1, %temp3
%rslt3 = add int %rslt2, %temp4
%rslt4 = add int %rslt3, %temp5
ret int %rslt4
declare i32 @puts(i8*)
define i32 @main() {
%hello_p = getelementptr [6 x i8]* @hello, i32 0, i32 0 ; <i8*> [#uses=5]
%hell_p = getelementptr [5 x i8]* @hell, i32 0, i32 0 ; <i8*> [#uses=1]
%null_p = getelementptr [1 x i8]* @null, i32 0, i32 0 ; <i8*> [#uses=4]
%temp1 = call i32 @strcmp( i8* %hello_p, i8* %hello_p ) ; <i32> [#uses=1]
%temp2 = call i32 @strcmp( i8* %null_p, i8* %null_p ) ; <i32> [#uses=1]
%temp3 = call i32 @strcmp( i8* %hello_p, i8* %null_p ) ; <i32> [#uses=1]
%temp4 = call i32 @strcmp( i8* %null_p, i8* %hello_p ) ; <i32> [#uses=1]
%temp5 = call i32 @strcmp( i8* %hell_p, i8* %hello_p ) ; <i32> [#uses=1]
%rslt1 = add i32 %temp1, %temp2 ; <i32> [#uses=1]
%rslt2 = add i32 %rslt1, %temp3 ; <i32> [#uses=1]
%rslt3 = add i32 %rslt2, %temp4 ; <i32> [#uses=1]
%rslt4 = add i32 %rslt3, %temp5 ; <i32> [#uses=1]
ret i32 %rslt4
}

View File

@ -1,25 +1,26 @@
; Test that the StrCpyOptimizer works correctly
; RUN: llvm-upgrade < %s | llvm-as | opt -simplify-libcalls | llvm-dis | \
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis | \
; RUN: not grep {call.*strcpy}
declare sbyte* %strcpy(sbyte*,sbyte*)
declare int %puts(sbyte*)
%hello = constant [6 x sbyte] c"hello\00"
%null = constant [1 x sbyte] c"\00"
%null_hello = constant [7 x sbyte] c"\00hello\00"
@hello = constant [6 x i8] c"hello\00" ; <[6 x i8]*> [#uses=1]
@null = constant [1 x i8] zeroinitializer ; <[1 x i8]*> [#uses=1]
@null_hello = constant [7 x i8] c"\00hello\00" ; <[7 x i8]*> [#uses=1]
implementation ; Functions:
declare i8* @strcpy(i8*, i8*)
int %main () {
%target = alloca [1024 x sbyte]
%arg1 = getelementptr [1024 x sbyte]* %target, int 0, int 0
store sbyte 0, sbyte* %arg1
%arg2 = getelementptr [6 x sbyte]* %hello, int 0, int 0
%rslt1 = call sbyte* %strcpy(sbyte* %arg1, sbyte* %arg2)
%arg3 = getelementptr [1 x sbyte]* %null, int 0, int 0
%rslt2 = call sbyte* %strcpy(sbyte* %rslt1, sbyte* %arg3)
%arg4 = getelementptr [7 x sbyte]* %null_hello, int 0, int 0
%rslt3 = call sbyte* %strcpy(sbyte* %rslt2, sbyte* %arg4)
call int %puts(sbyte* %rslt3)
ret int 0
declare i32 @puts(i8*)
define i32 @main() {
%target = alloca [1024 x i8] ; <[1024 x i8]*> [#uses=1]
%arg1 = getelementptr [1024 x i8]* %target, i32 0, i32 0 ; <i8*> [#uses=2]
store i8 0, i8* %arg1
%arg2 = getelementptr [6 x i8]* @hello, i32 0, i32 0 ; <i8*> [#uses=1]
%rslt1 = call i8* @strcpy( i8* %arg1, i8* %arg2 ) ; <i8*> [#uses=1]
%arg3 = getelementptr [1 x i8]* @null, i32 0, i32 0 ; <i8*> [#uses=1]
%rslt2 = call i8* @strcpy( i8* %rslt1, i8* %arg3 ) ; <i8*> [#uses=1]
%arg4 = getelementptr [7 x i8]* @null_hello, i32 0, i32 0 ; <i8*> [#uses=1]
%rslt3 = call i8* @strcpy( i8* %rslt2, i8* %arg4 ) ; <i8*> [#uses=1]
call i32 @puts( i8* %rslt3 ) ; <i32>:1 [#uses=0]
ret i32 0
}

View File

@ -1,58 +1,56 @@
; Test that the StrCatOptimizer works correctly
; RUN: llvm-upgrade < %s | llvm-as | opt -simplify-libcalls | llvm-dis | \
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis | \
; RUN: not grep {call.*strlen}
target datalayout = "e-p:32:32"
@hello = constant [6 x i8] c"hello\00" ; <[6 x i8]*> [#uses=3]
@null = constant [1 x i8] zeroinitializer ; <[1 x i8]*> [#uses=3]
@null_hello = constant [7 x i8] c"\00hello\00" ; <[7 x i8]*> [#uses=1]
declare uint %strlen(sbyte*)
%hello = constant [6 x sbyte] c"hello\00"
%null = constant [1 x sbyte] c"\00"
%null_hello = constant [7 x sbyte] c"\00hello\00"
declare i32 @strlen(i8*)
implementation ; Functions:
uint %test1() {
%hello_p = getelementptr [6 x sbyte]* %hello, int 0, int 0
%hello_l = call uint %strlen(sbyte* %hello_p)
ret uint %hello_l
define i32 @test1() {
%hello_p = getelementptr [6 x i8]* @hello, i32 0, i32 0 ; <i8*> [#uses=1]
%hello_l = call i32 @strlen( i8* %hello_p ) ; <i32> [#uses=1]
ret i32 %hello_l
}
uint %test2() {
%null_p = getelementptr [1 x sbyte]* %null, int 0, int 0
%null_l = call uint %strlen(sbyte* %null_p)
ret uint %null_l
define i32 @test2() {
%null_p = getelementptr [1 x i8]* @null, i32 0, i32 0 ; <i8*> [#uses=1]
%null_l = call i32 @strlen( i8* %null_p ) ; <i32> [#uses=1]
ret i32 %null_l
}
uint %test3() {
%null_hello_p = getelementptr [7 x sbyte]* %null_hello, int 0, int 0
%null_hello_l = call uint %strlen(sbyte* %null_hello_p)
ret uint %null_hello_l
define i32 @test3() {
%null_hello_p = getelementptr [7 x i8]* @null_hello, i32 0, i32 0 ; <i8*> [#uses=1]
%null_hello_l = call i32 @strlen( i8* %null_hello_p ) ; <i32> [#uses=1]
ret i32 %null_hello_l
}
bool %test4() {
%hello_p = getelementptr [6 x sbyte]* %hello, int 0, int 0
%hello_l = call uint %strlen(sbyte* %hello_p)
%eq_hello = seteq uint %hello_l, 0
ret bool %eq_hello
define i1 @test4() {
%hello_p = getelementptr [6 x i8]* @hello, i32 0, i32 0 ; <i8*> [#uses=1]
%hello_l = call i32 @strlen( i8* %hello_p ) ; <i32> [#uses=1]
%eq_hello = icmp eq i32 %hello_l, 0 ; <i1> [#uses=1]
ret i1 %eq_hello
}
bool %test5() {
%null_p = getelementptr [1 x sbyte]* %null, int 0, int 0
%null_l = call uint %strlen(sbyte* %null_p)
%eq_null = seteq uint %null_l, 0
ret bool %eq_null
define i1 @test5() {
%null_p = getelementptr [1 x i8]* @null, i32 0, i32 0 ; <i8*> [#uses=1]
%null_l = call i32 @strlen( i8* %null_p ) ; <i32> [#uses=1]
%eq_null = icmp eq i32 %null_l, 0 ; <i1> [#uses=1]
ret i1 %eq_null
}
bool %test6() {
%hello_p = getelementptr [6 x sbyte]* %hello, int 0, int 0
%hello_l = call uint %strlen(sbyte* %hello_p)
%ne_hello = setne uint %hello_l, 0
ret bool %ne_hello
define i1 @test6() {
%hello_p = getelementptr [6 x i8]* @hello, i32 0, i32 0 ; <i8*> [#uses=1]
%hello_l = call i32 @strlen( i8* %hello_p ) ; <i32> [#uses=1]
%ne_hello = icmp ne i32 %hello_l, 0 ; <i1> [#uses=1]
ret i1 %ne_hello
}
bool %test7() {
%null_p = getelementptr [1 x sbyte]* %null, int 0, int 0
%null_l = call uint %strlen(sbyte* %null_p)
%ne_null = setne uint %null_l, 0
ret bool %ne_null
define i1 @test7() {
%null_p = getelementptr [1 x i8]* @null, i32 0, i32 0 ; <i8*> [#uses=1]
%null_l = call i32 @strlen( i8* %null_p ) ; <i32> [#uses=1]
%ne_null = icmp ne i32 %null_l, 0 ; <i1> [#uses=1]
ret i1 %ne_null
}

View File

@ -1,27 +1,28 @@
; Test that the StrNCmpOptimizer works correctly
; RUN: llvm-upgrade < %s | llvm-as | opt -simplify-libcalls | llvm-dis | \
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis | \
; RUN: not grep {call.*strncmp}
declare int %strncmp(sbyte*,sbyte*,int)
declare int %puts(sbyte*)
%hello = constant [6 x sbyte] c"hello\00"
%hell = constant [5 x sbyte] c"hell\00"
%null = constant [1 x sbyte] c"\00"
@hello = constant [6 x i8] c"hello\00" ; <[6 x i8]*> [#uses=1]
@hell = constant [5 x i8] c"hell\00" ; <[5 x i8]*> [#uses=1]
@null = constant [1 x i8] zeroinitializer ; <[1 x i8]*> [#uses=1]
implementation ; Functions:
declare i32 @strncmp(i8*, i8*, i32)
int %main () {
%hello_p = getelementptr [6 x sbyte]* %hello, int 0, int 0
%hell_p = getelementptr [5 x sbyte]* %hell, int 0, int 0
%null_p = getelementptr [1 x sbyte]* %null, int 0, int 0
%temp1 = call int %strncmp(sbyte* %hello_p, sbyte* %hello_p,int 5)
%temp2 = call int %strncmp(sbyte* %null_p, sbyte* %null_p,int 0)
%temp3 = call int %strncmp(sbyte* %hello_p, sbyte* %null_p,int 0)
%temp4 = call int %strncmp(sbyte* %null_p, sbyte* %hello_p,int 0)
%temp5 = call int %strncmp(sbyte* %hell_p, sbyte* %hello_p,int 4)
%rslt1 = add int %temp1, %temp2
%rslt2 = add int %rslt1, %temp3
%rslt3 = add int %rslt2, %temp4
%rslt4 = add int %rslt3, %temp5
ret int %rslt4
declare i32 @puts(i8*)
define i32 @main() {
%hello_p = getelementptr [6 x i8]* @hello, i32 0, i32 0 ; <i8*> [#uses=5]
%hell_p = getelementptr [5 x i8]* @hell, i32 0, i32 0 ; <i8*> [#uses=1]
%null_p = getelementptr [1 x i8]* @null, i32 0, i32 0 ; <i8*> [#uses=4]
%temp1 = call i32 @strncmp( i8* %hello_p, i8* %hello_p, i32 5 ) ; <i32> [#uses=1]
%temp2 = call i32 @strncmp( i8* %null_p, i8* %null_p, i32 0 ) ; <i32> [#uses=1]
%temp3 = call i32 @strncmp( i8* %hello_p, i8* %null_p, i32 0 ) ; <i32> [#uses=1]
%temp4 = call i32 @strncmp( i8* %null_p, i8* %hello_p, i32 0 ) ; <i32> [#uses=1]
%temp5 = call i32 @strncmp( i8* %hell_p, i8* %hello_p, i32 4 ) ; <i32> [#uses=1]
%rslt1 = add i32 %temp1, %temp2 ; <i32> [#uses=1]
%rslt2 = add i32 %rslt1, %temp3 ; <i32> [#uses=1]
%rslt3 = add i32 %rslt2, %temp4 ; <i32> [#uses=1]
%rslt4 = add i32 %rslt3, %temp5 ; <i32> [#uses=1]
ret i32 %rslt4
}

View File

@ -1,22 +1,21 @@
; Test that the ToAsciiOptimizer works correctly
; RUN: llvm-upgrade < %s | llvm-as | opt -simplify-libcalls | llvm-dis | \
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis | \
; RUN: not grep {call.*toascii}
declare int %toascii(int)
declare i32 @toascii(i32)
implementation ; Functions:
int %main () {
%val1 = call int %toascii(int 1)
%val2 = call int %toascii(int 0)
%val3 = call int %toascii(int 127)
%val4 = call int %toascii(int 128)
%val5 = call int %toascii(int 255)
%val6 = call int %toascii(int 256)
%rslt1 = add int %val1, %val2
%rslt2 = add int %val3, %val4
%rslt3 = add int %val5, %val6
%rslt4 = add int %rslt1, %rslt2
%rslt5 = add int %rslt4, %rslt3
ret int %rslt5
define i32 @main() {
%val1 = call i32 @toascii( i32 1 ) ; <i32> [#uses=1]
%val2 = call i32 @toascii( i32 0 ) ; <i32> [#uses=1]
%val3 = call i32 @toascii( i32 127 ) ; <i32> [#uses=1]
%val4 = call i32 @toascii( i32 128 ) ; <i32> [#uses=1]
%val5 = call i32 @toascii( i32 255 ) ; <i32> [#uses=1]
%val6 = call i32 @toascii( i32 256 ) ; <i32> [#uses=1]
%rslt1 = add i32 %val1, %val2 ; <i32> [#uses=1]
%rslt2 = add i32 %val3, %val4 ; <i32> [#uses=1]
%rslt3 = add i32 %val5, %val6 ; <i32> [#uses=1]
%rslt4 = add i32 %rslt1, %rslt2 ; <i32> [#uses=1]
%rslt5 = add i32 %rslt4, %rslt3 ; <i32> [#uses=1]
ret i32 %rslt5
}

View File

@ -1,4 +1,4 @@
; RUN: llvm-upgrade < %s | llvm-as | opt -simplify-libcalls | llvm-dis > %t
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis > %t
; RUN: not grep {call.*floor(} %t
; RUN: grep {call.*floorf(} %t
; RUN: not grep {call.*ceil(} %t
@ -7,28 +7,33 @@
; RUN: grep {call.*nearbyintf(} %t
; XFAIL: sparc
declare double %floor(double)
declare double %ceil(double)
declare double %nearbyint(double)
declare double @floor(double)
float %test_floor(float %C) {
%D = cast float %C to double
%E = call double %floor(double %D) ; --> floorf
%F = cast double %E to float
declare double @ceil(double)
declare double @nearbyint(double)
define float @test_floor(float %C) {
%D = fpext float %C to double ; <double> [#uses=1]
; --> floorf
%E = call double @floor( double %D ) ; <double> [#uses=1]
%F = fptrunc double %E to float ; <float> [#uses=1]
ret float %F
}
float %test_ceil(float %C) {
%D = cast float %C to double
%E = call double %ceil(double %D) ; --> ceilf
%F = cast double %E to float
define float @test_ceil(float %C) {
%D = fpext float %C to double ; <double> [#uses=1]
; --> ceilf
%E = call double @ceil( double %D ) ; <double> [#uses=1]
%F = fptrunc double %E to float ; <float> [#uses=1]
ret float %F
}
float %test_nearbyint(float %C) {
%D = cast float %C to double
%E = call double %nearbyint(double %D) ; --> floorf
%F = cast double %E to float
define float @test_nearbyint(float %C) {
%D = fpext float %C to double ; <double> [#uses=1]
; --> floorf
%E = call double @nearbyint( double %D ) ; <double> [#uses=1]
%F = fptrunc double %E to float ; <float> [#uses=1]
ret float %F
}

View File

@ -1,24 +1,24 @@
; Test that the memcmpOptimizer works correctly
; RUN: llvm-upgrade < %s | llvm-as | opt -simplify-libcalls | llvm-dis | \
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis | \
; RUN: not grep {call.*memcmp}
; RUN: llvm-upgrade < %s | llvm-as | opt -simplify-libcalls -disable-output
; RUN: llvm-as < %s | opt -simplify-libcalls -disable-output
declare int %memcmp(sbyte*,sbyte*,int)
%h = constant [2 x sbyte] c"h\00"
%hel = constant [4 x sbyte] c"hel\00"
%hello_u = constant [8 x sbyte] c"hello_u\00"
@h = constant [2 x i8] c"h\00" ; <[2 x i8]*> [#uses=0]
@hel = constant [4 x i8] c"hel\00" ; <[4 x i8]*> [#uses=0]
@hello_u = constant [8 x i8] c"hello_u\00" ; <[8 x i8]*> [#uses=0]
implementation
declare i32 @memcmp(i8*, i8*, i32)
void %test(sbyte *%P, sbyte *%Q, int %N, int* %IP, bool *%BP) {
%A = call int %memcmp(sbyte *%P, sbyte* %P, int %N)
volatile store int %A, int* %IP
%B = call int %memcmp(sbyte *%P, sbyte* %Q, int 0)
volatile store int %B, int* %IP
%C = call int %memcmp(sbyte *%P, sbyte* %Q, int 1)
volatile store int %C, int* %IP
%D = call int %memcmp(sbyte *%P, sbyte* %Q, int 2)
%E = seteq int %D, 0
volatile store bool %E, bool* %BP
ret void
define void @test(i8* %P, i8* %Q, i32 %N, i32* %IP, i1* %BP) {
%A = call i32 @memcmp( i8* %P, i8* %P, i32 %N ) ; <i32> [#uses=1]
volatile store i32 %A, i32* %IP
%B = call i32 @memcmp( i8* %P, i8* %Q, i32 0 ) ; <i32> [#uses=1]
volatile store i32 %B, i32* %IP
%C = call i32 @memcmp( i8* %P, i8* %Q, i32 1 ) ; <i32> [#uses=1]
volatile store i32 %C, i32* %IP
%D = call i32 @memcmp( i8* %P, i8* %Q, i32 2 ) ; <i32> [#uses=1]
%E = icmp eq i32 %D, 0 ; <i1> [#uses=1]
volatile store i1 %E, i1* %BP
ret void
}

View File

@ -1,17 +1,15 @@
; RUN: llvm-upgrade < %s | llvm-as | opt -tailcallelim | llvm-dis | not grep call
; RUN: llvm-as < %s | opt -tailcallelim | llvm-dis | not grep call
int %factorial(int %x) {
define i32 @factorial(i32 %x) {
entry:
%tmp.1 = setgt int %x, 0
br bool %tmp.1, label %then, label %else
then:
%tmp.6 = add int %x, -1
%tmp.4 = call int %factorial( int %tmp.6 )
%tmp.7 = mul int %tmp.4, %x
ret int %tmp.7
else:
ret int 1
%tmp.1 = icmp sgt i32 %x, 0 ; <i1> [#uses=1]
br i1 %tmp.1, label %then, label %else
then: ; preds = %entry
%tmp.6 = add i32 %x, -1 ; <i32> [#uses=1]
%tmp.4 = call i32 @factorial( i32 %tmp.6 ) ; <i32> [#uses=1]
%tmp.7 = mul i32 %tmp.4, %x ; <i32> [#uses=1]
ret i32 %tmp.7
else: ; preds = %entry
ret i32 1
}

View File

@ -3,20 +3,18 @@
; go out to the anonymous users of the demo script for "suggesting"
; optimizations that should be done. :)
; RUN: llvm-upgrade < %s | llvm-as | opt -tailcallelim | llvm-dis | not grep call
; RUN: llvm-as < %s | opt -tailcallelim | llvm-dis | not grep call
int %mul(int %x, int %y) {
define i32 @mul(i32 %x, i32 %y) {
entry:
%tmp.1 = seteq int %y, 0
br bool %tmp.1, label %return, label %endif
endif:
%tmp.8 = add int %y, -1
%tmp.5 = call int %mul( int %x, int %tmp.8 )
%tmp.9 = add int %tmp.5, %x
ret int %tmp.9
return:
ret int %x
%tmp.1 = icmp eq i32 %y, 0 ; <i1> [#uses=1]
br i1 %tmp.1, label %return, label %endif
endif: ; preds = %entry
%tmp.8 = add i32 %y, -1 ; <i32> [#uses=1]
%tmp.5 = call i32 @mul( i32 %x, i32 %tmp.8 ) ; <i32> [#uses=1]
%tmp.9 = add i32 %tmp.5, %x ; <i32> [#uses=1]
ret i32 %tmp.9
return: ; preds = %entry
ret i32 %x
}

View File

@ -1,30 +1,26 @@
; This function contains two tail calls, which should be eliminated
; RUN: llvm-upgrade < %s | llvm-as | \
; RUN: llvm-as < %s | \
; RUN: opt -tailcallelim -stats -disable-output |& grep {2 tailcallelim}
int %Ack(int %M.1, int %N.1) {
define i32 @Ack(i32 %M.1, i32 %N.1) {
entry:
%tmp.1 = seteq int %M.1, 0 ; <bool> [#uses=1]
br bool %tmp.1, label %then.0, label %endif.0
then.0:
%tmp.4 = add int %N.1, 1 ; <int> [#uses=1]
ret int %tmp.4
endif.0:
%tmp.6 = seteq int %N.1, 0 ; <bool> [#uses=1]
br bool %tmp.6, label %then.1, label %endif.1
then.1:
%tmp.10 = add int %M.1, -1 ; <int> [#uses=1]
%tmp.8 = call int %Ack( int %tmp.10, int 1 ) ; <int> [#uses=1]
ret int %tmp.8
endif.1:
%tmp.13 = add int %M.1, -1 ; <int> [#uses=1]
%tmp.17 = add int %N.1, -1 ; <int> [#uses=1]
%tmp.14 = call int %Ack( int %M.1, int %tmp.17 ) ; <int> [#uses=1]
%tmp.11 = call int %Ack( int %tmp.13, int %tmp.14 ) ; <int> [#uses=1]
ret int %tmp.11
%tmp.1 = icmp eq i32 %M.1, 0 ; <i1> [#uses=1]
br i1 %tmp.1, label %then.0, label %endif.0
then.0: ; preds = %entry
%tmp.4 = add i32 %N.1, 1 ; <i32> [#uses=1]
ret i32 %tmp.4
endif.0: ; preds = %entry
%tmp.6 = icmp eq i32 %N.1, 0 ; <i1> [#uses=1]
br i1 %tmp.6, label %then.1, label %endif.1
then.1: ; preds = %endif.0
%tmp.10 = add i32 %M.1, -1 ; <i32> [#uses=1]
%tmp.8 = call i32 @Ack( i32 %tmp.10, i32 1 ) ; <i32> [#uses=1]
ret i32 %tmp.8
endif.1: ; preds = %endif.0
%tmp.13 = add i32 %M.1, -1 ; <i32> [#uses=1]
%tmp.17 = add i32 %N.1, -1 ; <i32> [#uses=1]
%tmp.14 = call i32 @Ack( i32 %M.1, i32 %tmp.17 ) ; <i32> [#uses=1]
%tmp.11 = call i32 @Ack( i32 %tmp.13, i32 %tmp.14 ) ; <i32> [#uses=1]
ret i32 %tmp.11
}

View File

@ -1,12 +1,13 @@
; RUN: llvm-upgrade < %s | llvm-as | opt -tailcallelim | llvm-dis | \
; RUN: llvm-as < %s | opt -tailcallelim | llvm-dis | \
; RUN: grep {call i32 @foo}
declare void %bar(int*)
int %foo(uint %N) {
%A = alloca int, uint %N ;; Should stay in entry block because of 'tail' marker
store int 17, int* %A
call void %bar(int* %A)
declare void @bar(i32*)
%X = tail call int %foo(uint %N) ;; Cannot -tailcallelim this without increasing stack usage!
ret int %X
define i32 @foo(i32 %N) {
%A = alloca i32, i32 %N ; <i32*> [#uses=2]
store i32 17, i32* %A
call void @bar( i32* %A )
%X = tail call i32 @foo( i32 %N ) ; <i32> [#uses=1]
ret i32 %X
}

View File

@ -1,19 +1,17 @@
; This function contains intervening instructions which should be moved out of the way
; RUN: llvm-upgrade < %s | llvm-as | opt -tailcallelim | llvm-dis | not grep call
; RUN: llvm-as < %s | opt -tailcallelim | llvm-dis | not grep call
int %Test(int %X) {
define i32 @Test(i32 %X) {
entry:
%tmp.1 = seteq int %X, 0
br bool %tmp.1, label %then.0, label %endif.0
then.0:
%tmp.4 = add int %X, 1
ret int %tmp.4
endif.0:
%tmp.10 = add int %X, -1
%tmp.8 = call int %Test(int %tmp.10)
%DUMMY = add int %X, 1 ;; This should not prevent elimination
ret int %tmp.8
%tmp.1 = icmp eq i32 %X, 0 ; <i1> [#uses=1]
br i1 %tmp.1, label %then.0, label %endif.0
then.0: ; preds = %entry
%tmp.4 = add i32 %X, 1 ; <i32> [#uses=1]
ret i32 %tmp.4
endif.0: ; preds = %entry
%tmp.10 = add i32 %X, -1 ; <i32> [#uses=1]
%tmp.8 = call i32 @Test( i32 %tmp.10 ) ; <i32> [#uses=1]
%DUMMY = add i32 %X, 1 ; <i32> [#uses=0]
ret i32 %tmp.8
}

Some files were not shown because too many files have changed in this diff Show More