1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
; RUN: opt < %s -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 | llvm-dis
; END.
; ModuleID = '2006-12-08-Ptr-ICmp-Branch.ll'
target datalayout = "e-p:32:32"
target triple = "i686-pc-linux-gnu"
%struct.FILE = type { i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i16, i8, [1 x i8], ptr, i64, ptr, ptr, ptr, ptr, i32, i32, [40 x i8] }
%struct._IO_FILE = type { i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i16, i8, [1 x i8], ptr, i64, ptr, ptr, ptr, ptr, i32, i32, [40 x i8] }
%struct._IO_marker = type { ptr, ptr, i32 }
%struct.charsequence = type { ptr, i32, i32 }
%struct.trie_s = type { [26 x ptr], i32 }
@str = external global [14 x i8] ; <ptr> [#uses=0]
@str.upgrd.1 = external global [32 x i8] ; <ptr> [#uses=0]
@str.upgrd.2 = external global [12 x i8] ; <ptr> [#uses=0]
@C.0.2294 = external global %struct.charsequence ; <ptr> [#uses=3]
@t = external global ptr ; <ptr> [#uses=0]
@str.upgrd.3 = external global [3 x i8] ; <ptr> [#uses=0]
@str.upgrd.4 = external global [26 x i8] ; <ptr> [#uses=0]
declare void @charsequence_reset(ptr)
declare void @free(ptr)
declare void @charsequence_push(ptr, i8)
declare ptr @charsequence_val(ptr)
declare i32 @_IO_getc(ptr)
declare i32 @tolower(i32)
declare ptr @trie_insert(ptr, ptr)
declare i32 @feof(ptr)
define void @addfile(ptr %t, ptr %f) {
entry:
%t_addr = alloca ptr ; <ptr> [#uses=2]
%f_addr = alloca ptr ; <ptr> [#uses=3]
%c = alloca i8, align 1 ; <ptr> [#uses=7]
%wstate = alloca i32, align 4 ; <ptr> [#uses=4]
%cs = alloca %struct.charsequence, align 16 ; <ptr> [#uses=7]
%str = alloca ptr, align 4 ; <ptr> [#uses=3]
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
store ptr %t, ptr %t_addr
store ptr %f, ptr %f_addr
store i32 0, ptr %wstate
%tmp = getelementptr %struct.charsequence, ptr %cs, i64 0, i32 0 ; <ptr> [#uses=1]
%tmp1 = getelementptr %struct.charsequence, ptr @C.0.2294, i64 0, i32 0 ; <ptr> [#uses=1]
%tmp.upgrd.5 = load ptr, ptr %tmp1 ; <ptr> [#uses=1]
store ptr %tmp.upgrd.5, ptr %tmp
%tmp.upgrd.6 = getelementptr %struct.charsequence, ptr %cs, i64 0, i32 1 ; <ptr> [#uses=1]
%tmp2 = getelementptr %struct.charsequence, ptr @C.0.2294, i64 0, i32 1 ; <ptr> [#uses=1]
%tmp.upgrd.7 = load i32, ptr %tmp2 ; <i32> [#uses=1]
store i32 %tmp.upgrd.7, ptr %tmp.upgrd.6
%tmp3 = getelementptr %struct.charsequence, ptr %cs, i64 0, i32 2 ; <ptr> [#uses=1]
%tmp4 = getelementptr %struct.charsequence, ptr @C.0.2294, i64 0, i32 2 ; <ptr> [#uses=1]
%tmp5 = load i32, ptr %tmp4 ; <i32> [#uses=1]
store i32 %tmp5, ptr %tmp3
br label %bb33
bb: ; preds = %bb33
%tmp.upgrd.8 = load ptr, ptr %f_addr ; <ptr> [#uses=1]
%tmp.upgrd.9 = call i32 @_IO_getc( ptr %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, ptr %c
%tmp7 = load i32, ptr %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, ptr %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, ptr %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, ptr %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( ptr %cs, i8 %tmp1415 )
br label %bb21
bb16: ; preds = %cond_true12, %cond_true9
%tmp17 = call ptr @charsequence_val( ptr %cs ) ; <ptr> [#uses=1]
store ptr %tmp17, ptr %str
%tmp.upgrd.14 = load ptr, ptr %t_addr ; <ptr> [#uses=1]
%tmp18 = load ptr, ptr %str ; <ptr> [#uses=1]
%tmp19 = call ptr @trie_insert( ptr %tmp.upgrd.14, ptr %tmp18 ) ; <ptr> [#uses=0]
%tmp20 = load ptr, ptr %str ; <ptr> [#uses=1]
call void @free( ptr %tmp20 )
store i32 0, ptr %wstate
br label %bb21
bb21: ; preds = %bb16, %cond_next13
br label %cond_next32
cond_false: ; preds = %bb
%tmp22 = load i8, ptr %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, ptr %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( ptr %cs )
%tmp28 = load i8, ptr %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( ptr %cs, i8 %tmp2829 )
store i32 1, ptr %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 ptr, ptr %f_addr ; <ptr> [#uses=1]
%tmp35 = call i32 @feof( ptr %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
}
|