brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.4 KiB · 1418fff Raw
195 lines · plain
1; RUN: opt -S -passes=inline -inline-threshold=275 < %s | FileCheck %s2; RUN: opt -S -passes='cgscc(inline)' -inline-threshold=275 < %s | FileCheck %s3; PR130954 5; The performance of the c-ray benchmark largely depends on the inlining of a6; specific call to @ray_sphere. This test case is designed to verify that it's7; inlined at -O3.8 9target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"10target triple = "x86_64-apple-macosx10.8.0"11 12%struct.sphere = type { %struct.vec3, double, %struct.material, ptr }13%struct.vec3 = type { double, double, double }14%struct.material = type { %struct.vec3, double, double }15%struct.ray = type { %struct.vec3, %struct.vec3 }16%struct.spoint = type { %struct.vec3, %struct.vec3, %struct.vec3, double }17 18define i32 @caller(ptr %i) ssp {19  %shadow_ray = alloca %struct.ray, align 820  call void @fix(ptr %shadow_ray)21 22  %call = call i32 @ray_sphere(ptr %i, ptr byval(%struct.ray) align 8 %shadow_ray, ptr null)23  ret i32 %call24 25; CHECK-LABEL: @caller(26; CHECK-NOT: call i32 @ray_sphere27; CHECK: ret i3228}29 30declare void @fix(ptr)31 32define i32 @ray_sphere(ptr nocapture %sph, ptr nocapture byval(%struct.ray) align 8 %ray, ptr %sp) nounwind uwtable ssp {33  %1 = getelementptr inbounds %struct.ray, ptr %ray, i64 0, i32 1, i32 034  %2 = load double, ptr %1, align 835  %3 = fmul double %2, %236  %4 = getelementptr inbounds %struct.ray, ptr %ray, i64 0, i32 1, i32 137  %5 = load double, ptr %4, align 838  %6 = fmul double %5, %539  %7 = fadd double %3, %640  %8 = getelementptr inbounds %struct.ray, ptr %ray, i64 0, i32 1, i32 241  %9 = load double, ptr %8, align 842  %10 = fmul double %9, %943  %11 = fadd double %7, %1044  %12 = fmul double %2, 2.000000e+0045  %13 = getelementptr inbounds %struct.ray, ptr %ray, i64 0, i32 0, i32 046  %14 = load double, ptr %13, align 847  %15 = getelementptr inbounds %struct.sphere, ptr %sph, i64 0, i32 0, i32 048  %16 = load double, ptr %15, align 849  %17 = fsub double %14, %1650  %18 = fmul double %12, %1751  %19 = fmul double %5, 2.000000e+0052  %20 = getelementptr inbounds %struct.ray, ptr %ray, i64 0, i32 0, i32 153  %21 = load double, ptr %20, align 854  %22 = getelementptr inbounds %struct.sphere, ptr %sph, i64 0, i32 0, i32 155  %23 = load double, ptr %22, align 856  %24 = fsub double %21, %2357  %25 = fmul double %19, %2458  %26 = fadd double %18, %2559  %27 = fmul double %9, 2.000000e+0060  %28 = getelementptr inbounds %struct.ray, ptr %ray, i64 0, i32 0, i32 261  %29 = load double, ptr %28, align 862  %30 = getelementptr inbounds %struct.sphere, ptr %sph, i64 0, i32 0, i32 263  %31 = load double, ptr %30, align 864  %32 = fsub double %29, %3165  %33 = fmul double %27, %3266  %34 = fadd double %26, %3367  %35 = fmul double %16, %1668  %36 = fmul double %23, %2369  %37 = fadd double %35, %3670  %38 = fmul double %31, %3171  %39 = fadd double %37, %3872  %40 = fmul double %14, %1473  %41 = fadd double %40, %3974  %42 = fmul double %21, %2175  %43 = fadd double %42, %4176  %44 = fmul double %29, %2977  %45 = fadd double %44, %4378  %46 = fsub double -0.000000e+00, %1679  %47 = fmul double %14, %4680  %48 = fmul double %21, %2381  %49 = fsub double %47, %4882  %50 = fmul double %29, %3183  %51 = fsub double %49, %5084  %52 = fmul double %51, 2.000000e+0085  %53 = fadd double %52, %4586  %54 = getelementptr inbounds %struct.sphere, ptr %sph, i64 0, i32 187  %55 = load double, ptr %54, align 888  %56 = fmul double %55, %5589  %57 = fsub double %53, %5690  %58 = fmul double %34, %3491  %59 = fmul double %11, 4.000000e+0092  %60 = fmul double %59, %5793  %61 = fsub double %58, %6094  %62 = fcmp olt double %61, 0.000000e+0095  br i1 %62, label %130, label %6396 97; <label>:63                                      ; preds = %098  %64 = tail call double @sqrt(double %61) nounwind readnone99  %65 = fsub double -0.000000e+00, %34100  %66 = fsub double %64, %34101  %67 = fmul double %11, 2.000000e+00102  %68 = fdiv double %66, %67103  %69 = fsub double %65, %64104  %70 = fdiv double %69, %67105  %71 = fcmp olt double %68, 1.000000e-06106  %72 = fcmp olt double %70, 1.000000e-06107  %or.cond = and i1 %71, %72108  br i1 %or.cond, label %130, label %73109 110; <label>:73                                      ; preds = %63111  %74 = fcmp ogt double %68, 1.000000e+00112  %75 = fcmp ogt double %70, 1.000000e+00113  %or.cond1 = and i1 %74, %75114  br i1 %or.cond1, label %130, label %76115 116; <label>:76                                      ; preds = %73117  %77 = icmp eq ptr %sp, null118  br i1 %77, label %130, label %78119 120; <label>:78                                      ; preds = %76121  %t1.0 = select i1 %71, double %70, double %68122  %t2.0 = select i1 %72, double %t1.0, double %70123  %79 = fcmp olt double %t1.0, %t2.0124  %80 = select i1 %79, double %t1.0, double %t2.0125  %81 = getelementptr inbounds %struct.spoint, ptr %sp, i64 0, i32 3126  store double %80, ptr %81, align 8127  %82 = fmul double %80, %2128  %83 = fadd double %14, %82129  %84 = getelementptr inbounds %struct.spoint, ptr %sp, i64 0, i32 0, i32 0130  store double %83, ptr %84, align 8131  %85 = fmul double %5, %80132  %86 = fadd double %21, %85133  %87 = getelementptr inbounds %struct.spoint, ptr %sp, i64 0, i32 0, i32 1134  store double %86, ptr %87, align 8135  %88 = fmul double %9, %80136  %89 = fadd double %29, %88137  %90 = getelementptr inbounds %struct.spoint, ptr %sp, i64 0, i32 0, i32 2138  store double %89, ptr %90, align 8139  %91 = load double, ptr %15, align 8140  %92 = fsub double %83, %91141  %93 = load double, ptr %54, align 8142  %94 = fdiv double %92, %93143  %95 = getelementptr inbounds %struct.spoint, ptr %sp, i64 0, i32 1, i32 0144  store double %94, ptr %95, align 8145  %96 = load double, ptr %22, align 8146  %97 = fsub double %86, %96147  %98 = load double, ptr %54, align 8148  %99 = fdiv double %97, %98149  %100 = getelementptr inbounds %struct.spoint, ptr %sp, i64 0, i32 1, i32 1150  store double %99, ptr %100, align 8151  %101 = load double, ptr %30, align 8152  %102 = fsub double %89, %101153  %103 = load double, ptr %54, align 8154  %104 = fdiv double %102, %103155  %105 = getelementptr inbounds %struct.spoint, ptr %sp, i64 0, i32 1, i32 2156  store double %104, ptr %105, align 8157  %106 = fmul double %2, %94158  %107 = fmul double %5, %99159  %108 = fadd double %106, %107160  %109 = fmul double %9, %104161  %110 = fadd double %108, %109162  %111 = fmul double %110, 2.000000e+00163  %112 = fmul double %94, %111164  %113 = fsub double %112, %2165  %114 = fsub double -0.000000e+00, %113166  %115 = fmul double %99, %111167  %116 = fsub double %115, %5168  %117 = fsub double -0.000000e+00, %116169  %118 = fmul double %104, %111170  %119 = fsub double %118, %9171  %120 = fsub double -0.000000e+00, %119172  %.06 = getelementptr inbounds %struct.spoint, ptr %sp, i64 0, i32 2, i32 0173  %.18 = getelementptr inbounds %struct.spoint, ptr %sp, i64 0, i32 2, i32 1174  %.210 = getelementptr inbounds %struct.spoint, ptr %sp, i64 0, i32 2, i32 2175  %121 = fmul double %113, %113176  %122 = fmul double %116, %116177  %123 = fadd double %121, %122178  %124 = fmul double %119, %119179  %125 = fadd double %123, %124180  %126 = tail call double @sqrt(double %125) nounwind readnone181  %127 = fdiv double %114, %126182  store double %127, ptr %.06, align 8183  %128 = fdiv double %117, %126184  store double %128, ptr %.18, align 8185  %129 = fdiv double %120, %126186  store double %129, ptr %.210, align 8187  br label %130188 189; <label>:130                                     ; preds = %78, %76, %73, %63, %0190  %.0 = phi i32 [ 0, %0 ], [ 0, %73 ], [ 0, %63 ], [ 1, %76 ], [ 1, %78 ]191  ret i32 %.0192}193 194declare double @sqrt(double) nounwind readnone195