brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.3 KiB · f72fcbc Raw
316 lines · plain
1; XFAIL: *2; RUN: opt < %s -passes=newgvn -S | FileCheck %s3 4	%struct.anon = type { ptr, i32, i32, [3 x i32], ptr, ptr, ptr }5@debug = external constant i32		; <ptr> [#uses=0]6@counters = external constant i32		; <ptr> [#uses=1]7@trialx = external global [17 x i32]		; <ptr> [#uses=1]8@dummy1 = external global [7 x i32]		; <ptr> [#uses=0]9@dummy2 = external global [4 x i32]		; <ptr> [#uses=0]10@unacceptable = external global i32		; <ptr> [#uses=0]11@isa = external global [13 x %struct.anon]		; <ptr> [#uses=3]12@.str = external constant [4 x i8]		; <ptr> [#uses=0]13@.str1 = external constant [3 x i8]		; <ptr> [#uses=0]14@.str2 = external constant [1 x i8]		; <ptr> [#uses=0]15@.str3 = external constant [4 x i8]		; <ptr> [#uses=0]16@.str4 = external constant [3 x i8]		; <ptr> [#uses=0]17@.str5 = external constant [4 x i8]		; <ptr> [#uses=0]18@.str6 = external constant [2 x i8]		; <ptr> [#uses=0]19@.str7 = external constant [4 x i8]		; <ptr> [#uses=0]20@.str8 = external constant [4 x i8]		; <ptr> [#uses=0]21@.str9 = external constant [4 x i8]		; <ptr> [#uses=0]22@.str10 = external constant [4 x i8]		; <ptr> [#uses=0]23@.str11 = external constant [2 x i8]		; <ptr> [#uses=0]24@.str12 = external constant [4 x i8]		; <ptr> [#uses=0]25@.str13 = external constant [2 x i8]		; <ptr> [#uses=0]26@.str14 = external constant [5 x i8]		; <ptr> [#uses=0]27@.str15 = external constant [5 x i8]		; <ptr> [#uses=0]28@.str16 = external constant [4 x i8]		; <ptr> [#uses=0]29@.str17 = external constant [4 x i8]		; <ptr> [#uses=0]30@.str18 = external constant [3 x i8]		; <ptr> [#uses=0]31@.str19 = external constant [4 x i8]		; <ptr> [#uses=0]32@.str20 = external constant [4 x i8]		; <ptr> [#uses=0]33@.str21 = external constant [4 x i8]		; <ptr> [#uses=0]34@.str22 = external constant [4 x i8]		; <ptr> [#uses=0]35@.str23 = external constant [5 x i8]		; <ptr> [#uses=0]36@.str24 = external constant [4 x i8]		; <ptr> [#uses=0]37@.str25 = external constant [6 x i8]		; <ptr> [#uses=0]38@.str26 = external constant [5 x i8]		; <ptr> [#uses=0]39@.str27 = external constant [6 x i8]		; <ptr> [#uses=0]40@r = external global [17 x i32]		; <ptr> [#uses=0]41@.str28 = external constant [3 x i8]		; <ptr> [#uses=0]42@.str29 = external constant [5 x i8]		; <ptr> [#uses=0]43@pgm = external global [5 x { i32, [3 x i32] }]		; <ptr> [#uses=4]44@.str30 = external constant [3 x i8]		; <ptr> [#uses=0]45@.str31 = external constant [13 x i8]		; <ptr> [#uses=0]46@.str32 = external constant [3 x i8]		; <ptr> [#uses=0]47@.str33 = external constant [4 x i8]		; <ptr> [#uses=0]48@.str34 = external constant [20 x i8]		; <ptr> [#uses=0]49@numi = external global i32		; <ptr> [#uses=7]50@.str35 = external constant [10 x i8]		; <ptr> [#uses=0]51@counter = external global [5 x i32]		; <ptr> [#uses=2]52@itrialx.2510 = external global i32		; <ptr> [#uses=0]53@.str36 = external constant [43 x i8]		; <ptr> [#uses=0]54@.str37 = external constant [42 x i8]		; <ptr> [#uses=0]55@corr_result = external global i32		; <ptr> [#uses=0]56@.str38 = external constant [3 x i8]		; <ptr> [#uses=0]57@.str39 = external constant [5 x i8]		; <ptr> [#uses=0]58@.str40 = external constant [47 x i8]		; <ptr> [#uses=0]59@correct_result = external global [17 x i32]		; <ptr> [#uses=1]60@.str41 = external constant [46 x i8]		; <ptr> [#uses=0]61@.str42 = external constant [32 x i8]		; <ptr> [#uses=0]62@.str43 = external constant [44 x i8]		; <ptr> [#uses=1]63@.str44 = external constant [21 x i8]		; <ptr> [#uses=1]64@.str45 = external constant [12 x i8]		; <ptr> [#uses=1]65@.str46 = external constant [5 x i8]		; <ptr> [#uses=1]66@.str47 = external constant [12 x i8]		; <ptr> [#uses=1]67 68declare i32 @neg(i32, i32, i32)69 70declare i32 @Not(i32, i32, i32)71 72declare i32 @pop(i32, i32, i32)73 74declare i32 @nlz(i32, i32, i32)75 76declare i32 @rev(i32, i32, i32)77 78declare i32 @add(i32, i32, i32)79 80declare i32 @sub(i32, i32, i32)81 82declare i32 @mul(i32, i32, i32)83 84declare i32 @divide(i32, i32, i32)85 86declare i32 @divu(i32, i32, i32)87 88declare i32 @And(i32, i32, i32)89 90declare i32 @Or(i32, i32, i32)91 92declare i32 @Xor(i32, i32, i32)93 94declare i32 @rotl(i32, i32, i32)95 96declare i32 @shl(i32, i32, i32)97 98declare i32 @shr(i32, i32, i32)99 100declare i32 @shrs(i32, i32, i32)101 102declare i32 @cmpeq(i32, i32, i32)103 104declare i32 @cmplt(i32, i32, i32)105 106declare i32 @cmpltu(i32, i32, i32)107 108declare i32 @seleq(i32, i32, i32)109 110declare i32 @sellt(i32, i32, i32)111 112declare i32 @selle(i32, i32, i32)113 114declare void @print_expr(i32)115 116declare i32 @printf(ptr, ...)117 118declare i32 @putchar(i32)119 120declare void @print_pgm()121 122declare void @simulate_one_instruction(i32)123 124declare i32 @check(i32)125 126declare i32 @puts(ptr)127 128declare void @fix_operands(i32)129 130declare void @abort()131 132declare i32 @increment()133 134declare i32 @search()135 136define i32 @main(i32 %argc, ptr %argv) {137entry:138	%argc_addr = alloca i32		; <ptr> [#uses=1]139	%argv_addr = alloca ptr		; <ptr> [#uses=1]140	%retval = alloca i32, align 4		; <ptr> [#uses=2]141	%tmp = alloca i32, align 4		; <ptr> [#uses=2]142	%i = alloca i32, align 4		; <ptr> [#uses=21]143	%num_sol = alloca i32, align 4		; <ptr> [#uses=4]144	%total = alloca i32, align 4		; <ptr> [#uses=4]145	%"alloca point" = bitcast i32 0 to i32		; <i32> [#uses=0]146	store i32 %argc, ptr %argc_addr147	store ptr %argv, ptr %argv_addr148	store i32 0, ptr %num_sol149	store i32 1, ptr @numi150	br label %bb91151 152bb:		; preds = %cond_next97153	%tmp1 = load i32, ptr @numi		; <i32> [#uses=1]154	%tmp2 = getelementptr [44 x i8], ptr @.str43, i32 0, i32 0		; <ptr> [#uses=1]155	%tmp3 = call i32 (ptr, ...) @printf( ptr %tmp2, i32 %tmp1 )		; <i32> [#uses=0]156	store i32 0, ptr %i157	br label %bb13158 159bb4:		; preds = %bb13160	%tmp5 = load i32, ptr %i		; <i32> [#uses=1]161	%tmp6 = load i32, ptr %i		; <i32> [#uses=1]162	%tmp7 = getelementptr [17 x i32], ptr @trialx, i32 0, i32 %tmp6		; <ptr> [#uses=1]163	%tmp8 = load i32, ptr %tmp7		; <i32> [#uses=1]164	%tmp9 = call i32 @userfun( i32 %tmp8 )		; <i32> [#uses=1]165	%tmp10 = getelementptr [17 x i32], ptr @correct_result, i32 0, i32 %tmp5		; <ptr> [#uses=1]166	store i32 %tmp9, ptr %tmp10167	%tmp11 = load i32, ptr %i		; <i32> [#uses=1]168	%tmp12 = add i32 %tmp11, 1		; <i32> [#uses=1]169	store i32 %tmp12, ptr %i170	br label %bb13171 172bb13:		; preds = %bb4, %bb173	%tmp14 = load i32, ptr %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 %bb17178 179bb17:		; preds = %bb13180	store i32 0, ptr %i181	br label %bb49182 183bb18:		; preds = %bb49184	%tmp19 = load i32, ptr %i		; <i32> [#uses=1]185	%tmp20 = getelementptr [5 x { i32, [3 x i32] }], ptr @pgm, i32 0, i32 %tmp19		; <ptr> [#uses=1]186	%tmp21 = getelementptr { i32, [3 x i32] }, ptr %tmp20, i32 0, i32 0		; <ptr> [#uses=1]187	store i32 0, ptr %tmp21188	%tmp22 = load i32, ptr %i		; <i32> [#uses=1]189	%tmp23 = getelementptr [13 x %struct.anon], ptr @isa, i32 0, i32 0		; <ptr> [#uses=1]190	%tmp24 = getelementptr %struct.anon, ptr %tmp23, i32 0, i32 3		; <ptr> [#uses=1]191	%tmp25 = getelementptr [3 x i32], ptr %tmp24, i32 0, i32 0		; <ptr> [#uses=1]192	%tmp26 = load i32, ptr %tmp25		; <i32> [#uses=1]193	%tmp27 = getelementptr [5 x { i32, [3 x i32] }], ptr @pgm, i32 0, i32 %tmp22		; <ptr> [#uses=1]194	%tmp28 = getelementptr { i32, [3 x i32] }, ptr %tmp27, i32 0, i32 1		; <ptr> [#uses=1]195	%tmp29 = getelementptr [3 x i32], ptr %tmp28, i32 0, i32 0		; <ptr> [#uses=1]196	store i32 %tmp26, ptr %tmp29197	%tmp30 = load i32, ptr %i		; <i32> [#uses=1]198	%tmp31 = getelementptr [13 x %struct.anon], ptr @isa, i32 0, i32 0		; <ptr> [#uses=1]199	%tmp32 = getelementptr %struct.anon, ptr %tmp31, i32 0, i32 3		; <ptr> [#uses=1]200	%tmp33 = getelementptr [3 x i32], ptr %tmp32, i32 0, i32 1		; <ptr> [#uses=1]201	%tmp34 = load i32, ptr %tmp33		; <i32> [#uses=1]202	%tmp35 = getelementptr [5 x { i32, [3 x i32] }], ptr @pgm, i32 0, i32 %tmp30		; <ptr> [#uses=1]203	%tmp36 = getelementptr { i32, [3 x i32] }, ptr %tmp35, i32 0, i32 1		; <ptr> [#uses=1]204	%tmp37 = getelementptr [3 x i32], ptr %tmp36, i32 0, i32 1		; <ptr> [#uses=1]205	store i32 %tmp34, ptr %tmp37206	%tmp38 = load i32, ptr %i		; <i32> [#uses=1]207	%tmp39 = getelementptr [13 x %struct.anon], ptr @isa, i32 0, i32 0		; <ptr> [#uses=1]208	%tmp40 = getelementptr %struct.anon, ptr %tmp39, i32 0, i32 3		; <ptr> [#uses=1]209	%tmp41 = getelementptr [3 x i32], ptr %tmp40, i32 0, i32 2		; <ptr> [#uses=1]210	%tmp42 = load i32, ptr %tmp41		; <i32> [#uses=1]211	%tmp43 = getelementptr [5 x { i32, [3 x i32] }], ptr @pgm, i32 0, i32 %tmp38		; <ptr> [#uses=1]212	%tmp44 = getelementptr { i32, [3 x i32] }, ptr %tmp43, i32 0, i32 1		; <ptr> [#uses=1]213	%tmp45 = getelementptr [3 x i32], ptr %tmp44, i32 0, i32 2		; <ptr> [#uses=1]214	store i32 %tmp42, ptr %tmp45215	%tmp46 = load i32, ptr %i		; <i32> [#uses=1]216	call void @fix_operands( i32 %tmp46 )217	%tmp47 = load i32, ptr %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, ptr %i221	br label %bb49222 223bb49:		; preds = %bb18, %bb17224	%tmp50 = load i32, ptr @numi		; <i32> [#uses=1]225	%tmp51 = load i32, ptr %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 %bb55230 231bb55:		; preds = %bb49232	%tmp56 = call i32 @search( )		; <i32> [#uses=1]233	store i32 %tmp56, ptr %num_sol234	%tmp57 = getelementptr [21 x i8], ptr @.str44, i32 0, i32 0		; <ptr> [#uses=1]235	%tmp58 = load i32, ptr %num_sol		; <i32> [#uses=1]236	%tmp59 = call i32 (ptr, ...) @printf( ptr %tmp57, i32 %tmp58 )		; <i32> [#uses=0]237	%tmp60 = load i32, ptr @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_next242 243cond_true:		; preds = %bb55244	store i32 0, ptr %total245	%tmp64 = getelementptr [12 x i8], ptr @.str45, i32 0, i32 0		; <ptr> [#uses=1]246	%tmp65 = call i32 (ptr, ...) @printf( ptr %tmp64 )		; <i32> [#uses=0]247	store i32 0, ptr %i248	br label %bb79249 250bb66:		; preds = %bb79251	%tmp67 = load i32, ptr %i		; <i32> [#uses=1]252	%tmp68 = getelementptr [5 x i32], ptr @counter, i32 0, i32 %tmp67		; <ptr> [#uses=1]253	%tmp69 = load i32, ptr %tmp68		; <i32> [#uses=1]254	%tmp70 = getelementptr [5 x i8], ptr @.str46, i32 0, i32 0		; <ptr> [#uses=1]255	%tmp71 = call i32 (ptr, ...) @printf( ptr %tmp70, i32 %tmp69 )		; <i32> [#uses=0]256	%tmp72 = load i32, ptr %i		; <i32> [#uses=1]257	%tmp73 = getelementptr [5 x i32], ptr @counter, i32 0, i32 %tmp72		; <ptr> [#uses=1]258	%tmp74 = load i32, ptr %tmp73		; <i32> [#uses=1]259	%tmp75 = load i32, ptr %total		; <i32> [#uses=1]260	%tmp76 = add i32 %tmp74, %tmp75		; <i32> [#uses=1]261	store i32 %tmp76, ptr %total262	%tmp77 = load i32, ptr %i		; <i32> [#uses=1]263	%tmp78 = add i32 %tmp77, 1		; <i32> [#uses=1]264	store i32 %tmp78, ptr %i265	br label %bb79266 267bb79:		; preds = %bb66, %cond_true268	%tmp80 = load i32, ptr @numi		; <i32> [#uses=1]269	%tmp81 = load i32, ptr %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 %bb85274 275bb85:		; preds = %bb79276	%tmp86 = getelementptr [12 x i8], ptr @.str47, i32 0, i32 0		; <ptr> [#uses=1]277	%tmp87 = load i32, ptr %total		; <i32> [#uses=1]278	%tmp88 = call i32 (ptr, ...) @printf( ptr %tmp86, i32 %tmp87 )		; <i32> [#uses=0]279	br label %cond_next280 281cond_next:		; preds = %bb85, %bb55282	%tmp89 = load i32, ptr @numi		; <i32> [#uses=1]283	%tmp90 = add i32 %tmp89, 1		; <i32> [#uses=1]284	store i32 %tmp90, ptr @numi285	br label %bb91286 287bb91:		; preds = %cond_next, %entry288	%tmp92 = load i32, ptr @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_next97293 294cond_true96:		; preds = %bb91295	br label %bb102296 297cond_next97:		; preds = %bb91298	%tmp98 = load i32, ptr %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 %bb102303 304bb102:		; preds = %cond_next97, %cond_true96305	store i32 0, ptr %tmp306	%tmp103 = load i32, ptr %tmp		; <i32> [#uses=1]307	store i32 %tmp103, ptr %retval308	br label %return309 310return:		; preds = %bb102311	%retval104 = load i32, ptr %retval		; <i32> [#uses=1]312	ret i32 %retval104313}314 315declare i32 @userfun(i32)316