Home | History | Annotate | Download | only in NewGVN
      1 ; XFAIL: *
      2 ; RUN: opt < %s -basicaa -newgvn -S | FileCheck %s
      3 
      4 	%struct.anon = type { i32 (i32, i32, i32)*, i32, i32, [3 x i32], i8*, i8*, i8* }
      5 @debug = external constant i32		; <i32*> [#uses=0]
      6 @counters = external constant i32		; <i32*> [#uses=1]
      7 @trialx = external global [17 x i32]		; <[17 x i32]*> [#uses=1]
      8 @dummy1 = external global [7 x i32]		; <[7 x i32]*> [#uses=0]
      9 @dummy2 = external global [4 x i32]		; <[4 x i32]*> [#uses=0]
     10 @unacceptable = external global i32		; <i32*> [#uses=0]
     11 @isa = external global [13 x %struct.anon]		; <[13 x %struct.anon]*> [#uses=3]
     12 @.str = external constant [4 x i8]		; <[4 x i8]*> [#uses=0]
     13 @.str1 = external constant [3 x i8]		; <[3 x i8]*> [#uses=0]
     14 @.str2 = external constant [1 x i8]		; <[1 x i8]*> [#uses=0]
     15 @.str3 = external constant [4 x i8]		; <[4 x i8]*> [#uses=0]
     16 @.str4 = external constant [3 x i8]		; <[3 x i8]*> [#uses=0]
     17 @.str5 = external constant [4 x i8]		; <[4 x i8]*> [#uses=0]
     18 @.str6 = external constant [2 x i8]		; <[2 x i8]*> [#uses=0]
     19 @.str7 = external constant [4 x i8]		; <[4 x i8]*> [#uses=0]
     20 @.str8 = external constant [4 x i8]		; <[4 x i8]*> [#uses=0]
     21 @.str9 = external constant [4 x i8]		; <[4 x i8]*> [#uses=0]
     22 @.str10 = external constant [4 x i8]		; <[4 x i8]*> [#uses=0]
     23 @.str11 = external constant [2 x i8]		; <[2 x i8]*> [#uses=0]
     24 @.str12 = external constant [4 x i8]		; <[4 x i8]*> [#uses=0]
     25 @.str13 = external constant [2 x i8]		; <[2 x i8]*> [#uses=0]
     26 @.str14 = external constant [5 x i8]		; <[5 x i8]*> [#uses=0]
     27 @.str15 = external constant [5 x i8]		; <[5 x i8]*> [#uses=0]
     28 @.str16 = external constant [4 x i8]		; <[4 x i8]*> [#uses=0]
     29 @.str17 = external constant [4 x i8]		; <[4 x i8]*> [#uses=0]
     30 @.str18 = external constant [3 x i8]		; <[3 x i8]*> [#uses=0]
     31 @.str19 = external constant [4 x i8]		; <[4 x i8]*> [#uses=0]
     32 @.str20 = external constant [4 x i8]		; <[4 x i8]*> [#uses=0]
     33 @.str21 = external constant [4 x i8]		; <[4 x i8]*> [#uses=0]
     34 @.str22 = external constant [4 x i8]		; <[4 x i8]*> [#uses=0]
     35 @.str23 = external constant [5 x i8]		; <[5 x i8]*> [#uses=0]
     36 @.str24 = external constant [4 x i8]		; <[4 x i8]*> [#uses=0]
     37 @.str25 = external constant [6 x i8]		; <[6 x i8]*> [#uses=0]
     38 @.str26 = external constant [5 x i8]		; <[5 x i8]*> [#uses=0]
     39 @.str27 = external constant [6 x i8]		; <[6 x i8]*> [#uses=0]
     40 @r = external global [17 x i32]		; <[17 x i32]*> [#uses=0]
     41 @.str28 = external constant [3 x i8]		; <[3 x i8]*> [#uses=0]
     42 @.str29 = external constant [5 x i8]		; <[5 x i8]*> [#uses=0]
     43 @pgm = external global [5 x { i32, [3 x i32] }]		; <[5 x { i32, [3 x i32] }]*> [#uses=4]
     44 @.str30 = external constant [3 x i8]		; <[3 x i8]*> [#uses=0]
     45 @.str31 = external constant [13 x i8]		; <[13 x i8]*> [#uses=0]
     46 @.str32 = external constant [3 x i8]		; <[3 x i8]*> [#uses=0]
     47 @.str33 = external constant [4 x i8]		; <[4 x i8]*> [#uses=0]
     48 @.str34 = external constant [20 x i8]		; <[20 x i8]*> [#uses=0]
     49 @numi = external global i32		; <i32*> [#uses=7]
     50 @.str35 = external constant [10 x i8]		; <[10 x i8]*> [#uses=0]
     51 @counter = external global [5 x i32]		; <[5 x i32]*> [#uses=2]
     52 @itrialx.2510 = external global i32		; <i32*> [#uses=0]
     53 @.str36 = external constant [43 x i8]		; <[43 x i8]*> [#uses=0]
     54 @.str37 = external constant [42 x i8]		; <[42 x i8]*> [#uses=0]
     55 @corr_result = external global i32		; <i32*> [#uses=0]
     56 @.str38 = external constant [3 x i8]		; <[3 x i8]*> [#uses=0]
     57 @.str39 = external constant [5 x i8]		; <[5 x i8]*> [#uses=0]
     58 @.str40 = external constant [47 x i8]		; <[47 x i8]*> [#uses=0]
     59 @correct_result = external global [17 x i32]		; <[17 x i32]*> [#uses=1]
     60 @.str41 = external constant [46 x i8]		; <[46 x i8]*> [#uses=0]
     61 @.str42 = external constant [32 x i8]		; <[32 x i8]*> [#uses=0]
     62 @.str43 = external constant [44 x i8]		; <[44 x i8]*> [#uses=1]
     63 @.str44 = external constant [21 x i8]		; <[21 x i8]*> [#uses=1]
     64 @.str45 = external constant [12 x i8]		; <[12 x i8]*> [#uses=1]
     65 @.str46 = external constant [5 x i8]		; <[5 x i8]*> [#uses=1]
     66 @.str47 = external constant [12 x i8]		; <[12 x i8]*> [#uses=1]
     67 
     68 declare i32 @neg(i32, i32, i32)
     69 
     70 declare i32 @Not(i32, i32, i32)
     71 
     72 declare i32 @pop(i32, i32, i32)
     73 
     74 declare i32 @nlz(i32, i32, i32)
     75 
     76 declare i32 @rev(i32, i32, i32)
     77 
     78 declare i32 @add(i32, i32, i32)
     79 
     80 declare i32 @sub(i32, i32, i32)
     81 
     82 declare i32 @mul(i32, i32, i32)
     83 
     84 declare i32 @divide(i32, i32, i32)
     85 
     86 declare i32 @divu(i32, i32, i32)
     87 
     88 declare i32 @And(i32, i32, i32)
     89 
     90 declare i32 @Or(i32, i32, i32)
     91 
     92 declare i32 @Xor(i32, i32, i32)
     93 
     94 declare i32 @rotl(i32, i32, i32)
     95 
     96 declare i32 @shl(i32, i32, i32)
     97 
     98 declare i32 @shr(i32, i32, i32)
     99 
    100 declare i32 @shrs(i32, i32, i32)
    101 
    102 declare i32 @cmpeq(i32, i32, i32)
    103 
    104 declare i32 @cmplt(i32, i32, i32)
    105 
    106 declare i32 @cmpltu(i32, i32, i32)
    107 
    108 declare i32 @seleq(i32, i32, i32)
    109 
    110 declare i32 @sellt(i32, i32, i32)
    111 
    112 declare i32 @selle(i32, i32, i32)
    113 
    114 declare void @print_expr(i32)
    115 
    116 declare i32 @printf(i8*, ...)
    117 
    118 declare i32 @putchar(i32)
    119 
    120 declare void @print_pgm()
    121 
    122 declare void @simulate_one_instruction(i32)
    123 
    124 declare i32 @check(i32)
    125 
    126 declare i32 @puts(i8*)
    127 
    128 declare void @fix_operands(i32)
    129 
    130 declare void @abort()
    131 
    132 declare i32 @increment()
    133 
    134 declare i32 @search()
    135 
    136 define i32 @main(i32 %argc, i8** %argv) {
    137 entry:
    138 	%argc_addr = alloca i32		; <i32*> [#uses=1]
    139 	%argv_addr = alloca i8**		; <i8***> [#uses=1]
    140 	%retval = alloca i32, align 4		; <i32*> [#uses=2]
    141 	%tmp = alloca i32, align 4		; <i32*> [#uses=2]
    142 	%i = alloca i32, align 4		; <i32*> [#uses=21]
    143 	%num_sol = alloca i32, align 4		; <i32*> [#uses=4]
    144 	%total = alloca i32, align 4		; <i32*> [#uses=4]
    145 	%"alloca point" = bitcast i32 0 to i32		; <i32> [#uses=0]
    146 	store i32 %argc, i32* %argc_addr
    147 	store i8** %argv, i8*** %argv_addr
    148 	store i32 0, i32* %num_sol
    149 	store i32 1, i32* @numi
    150 	br label %bb91
    151 
    152 bb:		; preds = %cond_next97
    153 	%tmp1 = load i32, i32* @numi		; <i32> [#uses=1]
    154 	%tmp2 = getelementptr [44 x i8], [44 x i8]* @.str43, i32 0, i32 0		; <i8*> [#uses=1]
    155 	%tmp3 = call i32 (i8*, ...) @printf( i8* %tmp2, i32 %tmp1 )		; <i32> [#uses=0]
    156 	store i32 0, i32* %i
    157 	br label %bb13
    158 
    159 bb4:		; preds = %bb13
    160 	%tmp5 = load i32, i32* %i		; <i32> [#uses=1]
    161 	%tmp6 = load i32, i32* %i		; <i32> [#uses=1]
    162 	%tmp7 = getelementptr [17 x i32], [17 x i32]* @trialx, i32 0, i32 %tmp6		; <i32*> [#uses=1]
    163 	%tmp8 = load i32, i32* %tmp7		; <i32> [#uses=1]
    164 	%tmp9 = call i32 @userfun( i32 %tmp8 )		; <i32> [#uses=1]
    165 	%tmp10 = getelementptr [17 x i32], [17 x i32]* @correct_result, i32 0, i32 %tmp5		; <i32*> [#uses=1]
    166 	store i32 %tmp9, i32* %tmp10
    167 	%tmp11 = load i32, i32* %i		; <i32> [#uses=1]
    168 	%tmp12 = add i32 %tmp11, 1		; <i32> [#uses=1]
    169 	store i32 %tmp12, i32* %i
    170 	br label %bb13
    171 
    172 bb13:		; preds = %bb4, %bb
    173 	%tmp14 = load i32, i32* %i		; <i32> [#uses=1]
    174 	%tmp15 = icmp sle i32 %tmp14, 16		; <i1> [#uses=1]
    175 	%tmp1516 = zext i1 %tmp15 to i32		; <i32> [#uses=1]
    176 	%toBool = icmp ne i32 %tmp1516, 0		; <i1> [#uses=1]
    177 	br i1 %toBool, label %bb4, label %bb17
    178 
    179 bb17:		; preds = %bb13
    180 	store i32 0, i32* %i
    181 	br label %bb49
    182 
    183 bb18:		; preds = %bb49
    184 	%tmp19 = load i32, i32* %i		; <i32> [#uses=1]
    185 	%tmp20 = getelementptr [5 x { i32, [3 x i32] }], [5 x { i32, [3 x i32] }]* @pgm, i32 0, i32 %tmp19		; <{ i32, [3 x i32] }*> [#uses=1]
    186 	%tmp21 = getelementptr { i32, [3 x i32] }, { i32, [3 x i32] }* %tmp20, i32 0, i32 0		; <i32*> [#uses=1]
    187 	store i32 0, i32* %tmp21
    188 	%tmp22 = load i32, i32* %i		; <i32> [#uses=1]
    189 	%tmp23 = getelementptr [13 x %struct.anon], [13 x %struct.anon]* @isa, i32 0, i32 0		; <%struct.anon*> [#uses=1]
    190 	%tmp24 = getelementptr %struct.anon, %struct.anon* %tmp23, i32 0, i32 3		; <[3 x i32]*> [#uses=1]
    191 	%tmp25 = getelementptr [3 x i32], [3 x i32]* %tmp24, i32 0, i32 0		; <i32*> [#uses=1]
    192 	%tmp26 = load i32, i32* %tmp25		; <i32> [#uses=1]
    193 	%tmp27 = getelementptr [5 x { i32, [3 x i32] }], [5 x { i32, [3 x i32] }]* @pgm, i32 0, i32 %tmp22		; <{ i32, [3 x i32] }*> [#uses=1]
    194 	%tmp28 = getelementptr { i32, [3 x i32] }, { i32, [3 x i32] }* %tmp27, i32 0, i32 1		; <[3 x i32]*> [#uses=1]
    195 	%tmp29 = getelementptr [3 x i32], [3 x i32]* %tmp28, i32 0, i32 0		; <i32*> [#uses=1]
    196 	store i32 %tmp26, i32* %tmp29
    197 	%tmp30 = load i32, i32* %i		; <i32> [#uses=1]
    198 	%tmp31 = getelementptr [13 x %struct.anon], [13 x %struct.anon]* @isa, i32 0, i32 0		; <%struct.anon*> [#uses=1]
    199 	%tmp32 = getelementptr %struct.anon, %struct.anon* %tmp31, i32 0, i32 3		; <[3 x i32]*> [#uses=1]
    200 	%tmp33 = getelementptr [3 x i32], [3 x i32]* %tmp32, i32 0, i32 1		; <i32*> [#uses=1]
    201 	%tmp34 = load i32, i32* %tmp33		; <i32> [#uses=1]
    202 	%tmp35 = getelementptr [5 x { i32, [3 x i32] }], [5 x { i32, [3 x i32] }]* @pgm, i32 0, i32 %tmp30		; <{ i32, [3 x i32] }*> [#uses=1]
    203 	%tmp36 = getelementptr { i32, [3 x i32] }, { i32, [3 x i32] }* %tmp35, i32 0, i32 1		; <[3 x i32]*> [#uses=1]
    204 	%tmp37 = getelementptr [3 x i32], [3 x i32]* %tmp36, i32 0, i32 1		; <i32*> [#uses=1]
    205 	store i32 %tmp34, i32* %tmp37
    206 	%tmp38 = load i32, i32* %i		; <i32> [#uses=1]
    207 	%tmp39 = getelementptr [13 x %struct.anon], [13 x %struct.anon]* @isa, i32 0, i32 0		; <%struct.anon*> [#uses=1]
    208 	%tmp40 = getelementptr %struct.anon, %struct.anon* %tmp39, i32 0, i32 3		; <[3 x i32]*> [#uses=1]
    209 	%tmp41 = getelementptr [3 x i32], [3 x i32]* %tmp40, i32 0, i32 2		; <i32*> [#uses=1]
    210 	%tmp42 = load i32, i32* %tmp41		; <i32> [#uses=1]
    211 	%tmp43 = getelementptr [5 x { i32, [3 x i32] }], [5 x { i32, [3 x i32] }]* @pgm, i32 0, i32 %tmp38		; <{ i32, [3 x i32] }*> [#uses=1]
    212 	%tmp44 = getelementptr { i32, [3 x i32] }, { i32, [3 x i32] }* %tmp43, i32 0, i32 1		; <[3 x i32]*> [#uses=1]
    213 	%tmp45 = getelementptr [3 x i32], [3 x i32]* %tmp44, i32 0, i32 2		; <i32*> [#uses=1]
    214 	store i32 %tmp42, i32* %tmp45
    215 	%tmp46 = load i32, i32* %i		; <i32> [#uses=1]
    216 	call void @fix_operands( i32 %tmp46 )
    217 	%tmp47 = load i32, i32* %i		; <i32> [#uses=1]
    218 ; CHECK: %tmp47 = phi i32 [ %tmp48, %bb18 ], [ 0, %bb17 ]
    219 	%tmp48 = add i32 %tmp47, 1		; <i32> [#uses=1]
    220 	store i32 %tmp48, i32* %i
    221 	br label %bb49
    222 
    223 bb49:		; preds = %bb18, %bb17
    224 	%tmp50 = load i32, i32* @numi		; <i32> [#uses=1]
    225 	%tmp51 = load i32, i32* %i		; <i32> [#uses=1]
    226 	%tmp52 = icmp slt i32 %tmp51, %tmp50		; <i1> [#uses=1]
    227 	%tmp5253 = zext i1 %tmp52 to i32		; <i32> [#uses=1]
    228 	%toBool54 = icmp ne i32 %tmp5253, 0		; <i1> [#uses=1]
    229 	br i1 %toBool54, label %bb18, label %bb55
    230 
    231 bb55:		; preds = %bb49
    232 	%tmp56 = call i32 @search( )		; <i32> [#uses=1]
    233 	store i32 %tmp56, i32* %num_sol
    234 	%tmp57 = getelementptr [21 x i8], [21 x i8]* @.str44, i32 0, i32 0		; <i8*> [#uses=1]
    235 	%tmp58 = load i32, i32* %num_sol		; <i32> [#uses=1]
    236 	%tmp59 = call i32 (i8*, ...) @printf( i8* %tmp57, i32 %tmp58 )		; <i32> [#uses=0]
    237 	%tmp60 = load i32, i32* @counters		; <i32> [#uses=1]
    238 	%tmp61 = icmp ne i32 %tmp60, 0		; <i1> [#uses=1]
    239 	%tmp6162 = zext i1 %tmp61 to i32		; <i32> [#uses=1]
    240 	%toBool63 = icmp ne i32 %tmp6162, 0		; <i1> [#uses=1]
    241 	br i1 %toBool63, label %cond_true, label %cond_next
    242 
    243 cond_true:		; preds = %bb55
    244 	store i32 0, i32* %total
    245 	%tmp64 = getelementptr [12 x i8], [12 x i8]* @.str45, i32 0, i32 0		; <i8*> [#uses=1]
    246 	%tmp65 = call i32 (i8*, ...) @printf( i8* %tmp64 )		; <i32> [#uses=0]
    247 	store i32 0, i32* %i
    248 	br label %bb79
    249 
    250 bb66:		; preds = %bb79
    251 	%tmp67 = load i32, i32* %i		; <i32> [#uses=1]
    252 	%tmp68 = getelementptr [5 x i32], [5 x i32]* @counter, i32 0, i32 %tmp67		; <i32*> [#uses=1]
    253 	%tmp69 = load i32, i32* %tmp68		; <i32> [#uses=1]
    254 	%tmp70 = getelementptr [5 x i8], [5 x i8]* @.str46, i32 0, i32 0		; <i8*> [#uses=1]
    255 	%tmp71 = call i32 (i8*, ...) @printf( i8* %tmp70, i32 %tmp69 )		; <i32> [#uses=0]
    256 	%tmp72 = load i32, i32* %i		; <i32> [#uses=1]
    257 	%tmp73 = getelementptr [5 x i32], [5 x i32]* @counter, i32 0, i32 %tmp72		; <i32*> [#uses=1]
    258 	%tmp74 = load i32, i32* %tmp73		; <i32> [#uses=1]
    259 	%tmp75 = load i32, i32* %total		; <i32> [#uses=1]
    260 	%tmp76 = add i32 %tmp74, %tmp75		; <i32> [#uses=1]
    261 	store i32 %tmp76, i32* %total
    262 	%tmp77 = load i32, i32* %i		; <i32> [#uses=1]
    263 	%tmp78 = add i32 %tmp77, 1		; <i32> [#uses=1]
    264 	store i32 %tmp78, i32* %i
    265 	br label %bb79
    266 
    267 bb79:		; preds = %bb66, %cond_true
    268 	%tmp80 = load i32, i32* @numi		; <i32> [#uses=1]
    269 	%tmp81 = load i32, i32* %i		; <i32> [#uses=1]
    270 	%tmp82 = icmp slt i32 %tmp81, %tmp80		; <i1> [#uses=1]
    271 	%tmp8283 = zext i1 %tmp82 to i32		; <i32> [#uses=1]
    272 	%toBool84 = icmp ne i32 %tmp8283, 0		; <i1> [#uses=1]
    273 	br i1 %toBool84, label %bb66, label %bb85
    274 
    275 bb85:		; preds = %bb79
    276 	%tmp86 = getelementptr [12 x i8], [12 x i8]* @.str47, i32 0, i32 0		; <i8*> [#uses=1]
    277 	%tmp87 = load i32, i32* %total		; <i32> [#uses=1]
    278 	%tmp88 = call i32 (i8*, ...) @printf( i8* %tmp86, i32 %tmp87 )		; <i32> [#uses=0]
    279 	br label %cond_next
    280 
    281 cond_next:		; preds = %bb85, %bb55
    282 	%tmp89 = load i32, i32* @numi		; <i32> [#uses=1]
    283 	%tmp90 = add i32 %tmp89, 1		; <i32> [#uses=1]
    284 	store i32 %tmp90, i32* @numi
    285 	br label %bb91
    286 
    287 bb91:		; preds = %cond_next, %entry
    288 	%tmp92 = load i32, i32* @numi		; <i32> [#uses=1]
    289 	%tmp93 = icmp sgt i32 %tmp92, 5		; <i1> [#uses=1]
    290 	%tmp9394 = zext i1 %tmp93 to i32		; <i32> [#uses=1]
    291 	%toBool95 = icmp ne i32 %tmp9394, 0		; <i1> [#uses=1]
    292 	br i1 %toBool95, label %cond_true96, label %cond_next97
    293 
    294 cond_true96:		; preds = %bb91
    295 	br label %bb102
    296 
    297 cond_next97:		; preds = %bb91
    298 	%tmp98 = load i32, i32* %num_sol		; <i32> [#uses=1]
    299 	%tmp99 = icmp eq i32 %tmp98, 0		; <i1> [#uses=1]
    300 	%tmp99100 = zext i1 %tmp99 to i32		; <i32> [#uses=1]
    301 	%toBool101 = icmp ne i32 %tmp99100, 0		; <i1> [#uses=1]
    302 	br i1 %toBool101, label %bb, label %bb102
    303 
    304 bb102:		; preds = %cond_next97, %cond_true96
    305 	store i32 0, i32* %tmp
    306 	%tmp103 = load i32, i32* %tmp		; <i32> [#uses=1]
    307 	store i32 %tmp103, i32* %retval
    308 	br label %return
    309 
    310 return:		; preds = %bb102
    311 	%retval104 = load i32, i32* %retval		; <i32> [#uses=1]
    312 	ret i32 %retval104
    313 }
    314 
    315 declare i32 @userfun(i32)
    316