brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.9 KiB · fc5f608 Raw
233 lines · plain
1; RUN: opt -passes=inline -inline-threshold=225 -inlinehint-threshold=360 -S < %s | FileCheck %s2 3@data = common global ptr null, align 84 5define i32 @fct1(i32 %a) nounwind uwtable ssp {6entry:7  %a.addr = alloca i32, align 48  %res = alloca i32, align 49  %i = alloca i32, align 410  store i32 %a, ptr %a.addr, align 411  %tmp = load i32, ptr %a.addr, align 412  %idxprom = sext i32 %tmp to i6413  %tmp1 = load ptr, ptr @data, align 814  %arrayidx = getelementptr inbounds i32, ptr %tmp1, i64 %idxprom15  %tmp2 = load i32, ptr %arrayidx, align 416  %tmp3 = load i32, ptr %a.addr, align 417  %add = add nsw i32 %tmp3, 118  %idxprom1 = sext i32 %add to i6419  %tmp4 = load ptr, ptr @data, align 820  %arrayidx2 = getelementptr inbounds i32, ptr %tmp4, i64 %idxprom121  %tmp5 = load i32, ptr %arrayidx2, align 422  %mul = mul nsw i32 %tmp2, %tmp523  store i32 %mul, ptr %res, align 424  store i32 0, ptr %i, align 425  store i32 0, ptr %i, align 426  br label %for.cond27 28for.cond:                                         ; preds = %for.inc, %entry29  %tmp6 = load i32, ptr %i, align 430  %tmp7 = load i32, ptr %res, align 431  %cmp = icmp slt i32 %tmp6, %tmp732  br i1 %cmp, label %for.body, label %for.end33 34for.body:                                         ; preds = %for.cond35  %tmp8 = load i32, ptr %i, align 436  %idxprom3 = sext i32 %tmp8 to i6437  %tmp9 = load ptr, ptr @data, align 838  %arrayidx4 = getelementptr inbounds i32, ptr %tmp9, i64 %idxprom339  call void @fct0(ptr %arrayidx4)40  br label %for.inc41 42for.inc:                                          ; preds = %for.body43  %tmp10 = load i32, ptr %i, align 444  %inc = add nsw i32 %tmp10, 145  store i32 %inc, ptr %i, align 446  br label %for.cond47 48for.end:                                          ; preds = %for.cond49  store i32 0, ptr %i, align 450  br label %for.cond551 52for.cond5:                                        ; preds = %for.inc10, %for.end53  %tmp11 = load i32, ptr %i, align 454  %tmp12 = load i32, ptr %res, align 455  %cmp6 = icmp slt i32 %tmp11, %tmp1256  br i1 %cmp6, label %for.body7, label %for.end1257 58for.body7:                                        ; preds = %for.cond559  %tmp13 = load i32, ptr %i, align 460  %idxprom8 = sext i32 %tmp13 to i6461  %tmp14 = load ptr, ptr @data, align 862  %arrayidx9 = getelementptr inbounds i32, ptr %tmp14, i64 %idxprom863  call void @fct0(ptr %arrayidx9)64  br label %for.inc1065 66for.inc10:                                        ; preds = %for.body767  %tmp15 = load i32, ptr %i, align 468  %inc11 = add nsw i32 %tmp15, 169  store i32 %inc11, ptr %i, align 470  br label %for.cond571 72for.end12:                                        ; preds = %for.cond573  store i32 0, ptr %i, align 474  br label %for.cond1375 76for.cond13:                                       ; preds = %for.inc18, %for.end1277  %tmp16 = load i32, ptr %i, align 478  %tmp17 = load i32, ptr %res, align 479  %cmp14 = icmp slt i32 %tmp16, %tmp1780  br i1 %cmp14, label %for.body15, label %for.end2081 82for.body15:                                       ; preds = %for.cond1383  %tmp18 = load i32, ptr %i, align 484  %idxprom16 = sext i32 %tmp18 to i6485  %tmp19 = load ptr, ptr @data, align 886  %arrayidx17 = getelementptr inbounds i32, ptr %tmp19, i64 %idxprom1687  call void @fct0(ptr %arrayidx17)88  br label %for.inc1889 90for.inc18:                                        ; preds = %for.body1591  %tmp20 = load i32, ptr %i, align 492  %inc19 = add nsw i32 %tmp20, 193  store i32 %inc19, ptr %i, align 494  br label %for.cond1395 96for.end20:                                        ; preds = %for.cond1397  %tmp21 = load i32, ptr %res, align 498  ret i32 %tmp2199}100 101declare void @fct0(ptr)102 103define i32 @fct2(i32 %a) nounwind uwtable inlinehint ssp {104entry:105  %a.addr = alloca i32, align 4106  %res = alloca i32, align 4107  %i = alloca i32, align 4108  store i32 %a, ptr %a.addr, align 4109  %tmp = load i32, ptr %a.addr, align 4110  %shl = shl i32 %tmp, 1111  %idxprom = sext i32 %shl to i64112  %tmp1 = load ptr, ptr @data, align 8113  %arrayidx = getelementptr inbounds i32, ptr %tmp1, i64 %idxprom114  %tmp2 = load i32, ptr %arrayidx, align 4115  %tmp3 = load i32, ptr %a.addr, align 4116  %shl1 = shl i32 %tmp3, 1117  %add = add nsw i32 %shl1, 13118  %idxprom2 = sext i32 %add to i64119  %tmp4 = load ptr, ptr @data, align 8120  %arrayidx3 = getelementptr inbounds i32, ptr %tmp4, i64 %idxprom2121  %tmp5 = load i32, ptr %arrayidx3, align 4122  %mul = mul nsw i32 %tmp2, %tmp5123  store i32 %mul, ptr %res, align 4124  store i32 0, ptr %i, align 4125  store i32 0, ptr %i, align 4126  br label %for.cond127 128for.cond:                                         ; preds = %for.inc, %entry129  %tmp6 = load i32, ptr %i, align 4130  %tmp7 = load i32, ptr %res, align 4131  %cmp = icmp slt i32 %tmp6, %tmp7132  br i1 %cmp, label %for.body, label %for.end133 134for.body:                                         ; preds = %for.cond135  %tmp8 = load i32, ptr %i, align 4136  %idxprom4 = sext i32 %tmp8 to i64137  %tmp9 = load ptr, ptr @data, align 8138  %arrayidx5 = getelementptr inbounds i32, ptr %tmp9, i64 %idxprom4139  call void @fct0(ptr %arrayidx5)140  br label %for.inc141 142for.inc:                                          ; preds = %for.body143  %tmp10 = load i32, ptr %i, align 4144  %inc = add nsw i32 %tmp10, 1145  store i32 %inc, ptr %i, align 4146  br label %for.cond147 148for.end:                                          ; preds = %for.cond149  store i32 0, ptr %i, align 4150  br label %for.cond6151 152for.cond6:                                        ; preds = %for.inc11, %for.end153  %tmp11 = load i32, ptr %i, align 4154  %tmp12 = load i32, ptr %res, align 4155  %cmp7 = icmp slt i32 %tmp11, %tmp12156  br i1 %cmp7, label %for.body8, label %for.end13157 158for.body8:                                        ; preds = %for.cond6159  %tmp13 = load i32, ptr %i, align 4160  %idxprom9 = sext i32 %tmp13 to i64161  %tmp14 = load ptr, ptr @data, align 8162  %arrayidx10 = getelementptr inbounds i32, ptr %tmp14, i64 %idxprom9163  call void @fct0(ptr %arrayidx10)164  br label %for.inc11165 166for.inc11:                                        ; preds = %for.body8167  %tmp15 = load i32, ptr %i, align 4168  %inc12 = add nsw i32 %tmp15, 1169  store i32 %inc12, ptr %i, align 4170  br label %for.cond6171 172for.end13:                                        ; preds = %for.cond6173  store i32 0, ptr %i, align 4174  br label %for.cond14175 176for.cond14:                                       ; preds = %for.inc19, %for.end13177  %tmp16 = load i32, ptr %i, align 4178  %tmp17 = load i32, ptr %res, align 4179  %cmp15 = icmp slt i32 %tmp16, %tmp17180  br i1 %cmp15, label %for.body16, label %for.end21181 182for.body16:                                       ; preds = %for.cond14183  %tmp18 = load i32, ptr %i, align 4184  %idxprom17 = sext i32 %tmp18 to i64185  %tmp19 = load ptr, ptr @data, align 8186  %arrayidx18 = getelementptr inbounds i32, ptr %tmp19, i64 %idxprom17187  call void @fct0(ptr %arrayidx18)188  br label %for.inc19189 190for.inc19:                                        ; preds = %for.body16191  %tmp20 = load i32, ptr %i, align 4192  %inc20 = add nsw i32 %tmp20, 1193  store i32 %inc20, ptr %i, align 4194  br label %for.cond14195 196for.end21:                                        ; preds = %for.cond14197  %tmp21 = load i32, ptr %res, align 4198  ret i32 %tmp21199}200 201define i32 @fct3(i32 %c) nounwind uwtable ssp {202entry:203  ;CHECK-LABEL: @fct3(204  ;CHECK: call i32 @fct1205  ; The inline keyword gives a sufficient benefits to inline fct2206  ;CHECK-NOT: call i32 @fct2207  %c.addr = alloca i32, align 4208  store i32 %c, ptr %c.addr, align 4209  %tmp = load i32, ptr %c.addr, align 4210  %call = call i32 @fct1(i32 %tmp)211  %tmp1 = load i32, ptr %c.addr, align 4212  %call1 = call i32 @fct2(i32 %tmp1)213  %add = add nsw i32 %call, %call1214  ret i32 %add215}216 217define i32 @fct4(i32 %c) minsize nounwind uwtable ssp {218entry:219  ;CHECK-LABEL: @fct4(220  ;CHECK: call i32 @fct1221  ; With Oz (minsize attribute), the benefit of inlining fct2222  ; is the same as fct1, thus no inlining for fct2223  ;CHECK: call i32 @fct2224  %c.addr = alloca i32, align 4225  store i32 %c, ptr %c.addr, align 4226  %tmp = load i32, ptr %c.addr, align 4227  %call = call i32 @fct1(i32 %tmp)228  %tmp1 = load i32, ptr %c.addr, align 4229  %call1 = call i32 @fct2(i32 %tmp1)230  %add = add nsw i32 %call, %call1231  ret i32 %add232}233