[llvm] r178058 - Update PEI's virtual-register-based scavenging to support multiple simultaneous mappings
Pranav Bhandarkar
pranavb at codeaurora.org
Tue Apr 2 15:21:21 PDT 2013
On 4/1/2013 11:07 PM, Pranav Bhandarkar wrote:
> On 4/1/2013 3:42 AM, Hal Finkel wrote:
>> Pranav, You're right! We'll need to 'unprocess' I if we're going to
>> process it again later (or at least we need to remark as used all
>> registers killed by I). Can you please bugpoint a reduced test case
>> for me? -Hal -- Qualcomm Innovation Center, Inc. is a member of Code
>> Aurora Forum, hosted by The Linux Foundation
>
> Hi Hal,
>
> I was not able to get to reducing this testcase today. I'll try to get
> you a reduced testcase tomorrow.
>
> Thanks,
> Pranav
>
Hi Hal,
Here is a reduced testcase.
llc -O3 -mcpu=hexagonv5r regscavengerbug.ll
HTH,
Pranav
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
-------------- next part --------------
;RUN: llc -O3 -mcpu=hexagonv5 < %s
target datalayout = "e-p:32:32:32-i64:64:64-i32:32:32-i16:16:16-i1:32:32-f64:64:64-f32:32:32-v64:64:64-v32:32:32-a0:0-n16:32"
target triple = "hexagon-unknown-linux-gnu"
%0 = type { i8 }
%1 = type { i8 }
%2 = type { [2 x double] }
%3 = type { [2 x double] }
%4 = type { [3 x double] }
%5 = type { [3 x double] }
%6 = type { %4, %4, %4 }
%7 = type { [4 x double] }
%8 = type { %5, %6 }
%9 = type { [4 x [4 x double]] }
%10 = type { %11, %12, %12, %11*, %5, %5 }
%11 = type { i32 (...)** }
%12 = type { %13 }
%13 = type { %9 }
%14 = type { %5, %5 }
%15 = type { %5, %4 }
%16 = type { [8 x float] }
%17 = type { double, %5, %6, %3, double, %16, %16, i32, i32, i32, i32 }
%18 = type { %3, %15, %15, %16, %16, %16, %19*, i32, i32, i32, i32 }
%19 = type { i32 (...)** }
%20 = type { i32 (...)**, %21 }
%21 = type { %22, %32*, %20*, i8 }
%22 = type { i32 (...)**, i32, i8, i8, i16, i32, i32, %23*, %24*, %25* }
%23 = type { %23*, i32, i32, i8* }
%24 = type { %24*, i32, void (i8, %22*, i32)* }
%25 = type { %26* }
%26 = type { %27, %27**, i32, i32, i8, %28 }
%27 = type { i32 (...)**, i32 }
%28 = type { %29, %31, i32, i32 }
%29 = type { %30 }
%30 = type { i8 }
%31 = type { i8*, [12 x i8] }
%32 = type { i32 (...)**, %33, i8*, i8*, i8**, i8**, i8*, i8*, i8**, i8**, i8*, i8*, i8**, i8**, %25* }
%33 = type { i8 }
@0 = internal global %0 zeroinitializer, align 1
@1 = internal global %1 zeroinitializer, align 1
@2 = internal global %2 zeroinitializer, align 8
@3 = internal global %2 zeroinitializer, align 8
@4 = internal global %3 zeroinitializer, align 8
@5 = internal global %4 zeroinitializer, align 8
@6 = internal global %4 zeroinitializer, align 8
@7 = internal global %4 zeroinitializer, align 8
@8 = internal global %4 zeroinitializer, align 8
@9 = internal global %4 zeroinitializer, align 8
@10 = internal global %4 zeroinitializer, align 8
@11 = internal global %5 zeroinitializer, align 8
@12 = internal global %5 zeroinitializer, align 8
@13 = internal global %6 zeroinitializer, align 8
@14 = internal global %7 zeroinitializer, align 8
@15 = internal global %8 zeroinitializer, align 8
@16 = internal global %9 zeroinitializer, align 8
@17 = internal global %9 zeroinitializer, align 8
@18 = internal global %9 zeroinitializer, align 8
@19 = internal global %9 zeroinitializer, align 8
@20 = internal global %9 zeroinitializer, align 8
declare void @afun(%5* sret , %12* , %5*)
define void @regscavenger_failure(%10*, %12* nocapture, %12* nocapture) align 2 {
%4 = alloca %14, align 8
%5 = alloca [2 x [2 x [2 x %5]]], align 8
%6 = alloca %5, align 8
%7 = getelementptr inbounds %10* %0, i32 0, i32 1
%8 = bitcast %12* %7 to i8*
%9 = bitcast %12* %1 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %8, i8* %9, i32 128, i32 8, i1 false)
%10 = getelementptr inbounds %10* %0, i32 0, i32 2
%11 = bitcast %12* %10 to i8*
%12 = bitcast %12* %2 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %11, i8* %12, i32 128, i32 8, i1 false)
%13 = bitcast %14* %4 to i8*
call void @llvm.memset.p0i8.i64(i8* %13, i8 0, i64 48, i32 8, i1 false) nounwind
%14 = getelementptr inbounds %10* %0, i32 0, i32 3
%15 = load %11** %14, align 4, !tbaa !2
%16 = bitcast %11* %15 to i32 (%11*, double, double, %14*)***
%17 = load i32 (%11*, double, double, %14*)*** %16, align 4, !tbaa !0
%18 = getelementptr inbounds i32 (%11*, double, double, %14*)** %17, i32 3
%19 = load i32 (%11*, double, double, %14*)** %18, align 4
%20 = call i32 %19(%11* %15, double 0.000000e+00, double 0.000000e+00, %14* %4)
%21 = icmp eq i32 %20, 0
br i1 %21, label %22, label %30
; <label>:22 ; preds = %3
%23 = getelementptr inbounds %10* %0, i32 0, i32 4, i32 0, i32 0
store double -1.000000e+06, double* %23, align 8, !tbaa !4
%24 = getelementptr inbounds %10* %0, i32 0, i32 4, i32 0, i32 1
store double -1.000000e+06, double* %24, align 8, !tbaa !4
%25 = getelementptr inbounds %10* %0, i32 0, i32 4, i32 0, i32 2
store double -1.000000e+06, double* %25, align 8, !tbaa !4
%26 = getelementptr inbounds %10* %0, i32 0, i32 5, i32 0, i32 0
store double 1.000000e+06, double* %26, align 8, !tbaa !4
%27 = getelementptr inbounds %10* %0, i32 0, i32 5, i32 0, i32 1
store double 1.000000e+06, double* %27, align 8, !tbaa !4
%28 = getelementptr inbounds %10* %0, i32 0, i32 5, i32 0, i32 2
store double 1.000000e+06, double* %28, align 8, !tbaa !4
br label %29
; <label>:29 ; preds = %30, %22
ret void
; <label>:30 ; preds = %3
%31 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 0, i32 0
%32 = bitcast [2 x [2 x [2 x %5]]]* %5 to i8*
%33 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 0, i32 2
%34 = bitcast %5* %33 to i8*
%35 = bitcast [2 x [2 x [2 x %5]]]* %5 to i8*
call void @llvm.memset.p0i8.i64(i8* %35, i8 0, i64 48, i32 8, i1 false)
call void @llvm.memset.p0i8.i64(i8* %34, i8 0, i64 24, i32 8, i1 false) nounwind
%36 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 0, i32 3
%37 = bitcast %5* %36 to i8*
call void @llvm.memset.p0i8.i64(i8* %37, i8 0, i64 24, i32 8, i1 false) nounwind
%38 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 0, i32 4
%39 = bitcast %5* %38 to i8*
call void @llvm.memset.p0i8.i64(i8* %39, i8 0, i64 24, i32 8, i1 false) nounwind
%40 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 0, i32 5
%41 = bitcast %5* %40 to i8*
call void @llvm.memset.p0i8.i64(i8* %41, i8 0, i64 24, i32 8, i1 false) nounwind
%42 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 0, i32 6
%43 = bitcast %5* %42 to i8*
call void @llvm.memset.p0i8.i64(i8* %43, i8 0, i64 24, i32 8, i1 false) nounwind
%44 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 0, i32 7
%45 = bitcast %5* %44 to i8*
call void @llvm.memset.p0i8.i64(i8* %45, i8 0, i64 24, i32 8, i1 false) nounwind
%46 = getelementptr inbounds %14* %4, i32 0, i32 0, i32 0, i32 0
%47 = getelementptr inbounds %14* %4, i32 0, i32 0, i32 0, i32 1
%48 = getelementptr inbounds %14* %4, i32 0, i32 0, i32 0, i32 2
%49 = bitcast %5* %6 to i8*
%50 = getelementptr inbounds %14* %4, i32 0, i32 1, i32 0, i32 2
%51 = getelementptr inbounds %14* %4, i32 0, i32 1, i32 0, i32 1
%52 = getelementptr inbounds %14* %4, i32 0, i32 1, i32 0, i32 0
%53 = load double* %46, align 8, !tbaa !4
%54 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0
store double %53, double* %54, align 8, !tbaa !4
%55 = load double* %47, align 8, !tbaa !4
%56 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1
store double %55, double* %56, align 8, !tbaa !4
%57 = load double* %48, align 8, !tbaa !4
%58 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 0, i32 0, i32 0, i32 2
store double %57, double* %58, align 8, !tbaa !4
call void @afun(%5* sret %6, %12* %7, %5* %31)
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %32, i8* %49, i32 24, i32 8, i1 false), !tbaa.struct !5
%59 = load double* %46, align 8, !tbaa !4
%60 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 0, i32 1, i32 0, i32 0
store double %59, double* %60, align 8, !tbaa !4
%61 = load double* %47, align 8, !tbaa !4
%62 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 0, i32 1, i32 0, i32 1
store double %61, double* %62, align 8, !tbaa !4
%63 = load double* %50, align 8, !tbaa !4
%64 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 0, i32 1, i32 0, i32 2
store double %63, double* %64, align 8, !tbaa !4
%65 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 0, i32 1
call void @afun(%5* sret %6, %12* %7, %5* %65)
%66 = bitcast %5* %65 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %66, i8* %49, i32 24, i32 8, i1 false), !tbaa.struct !5
%67 = load double* %46, align 8, !tbaa !4
%68 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0
store double %67, double* %68, align 8, !tbaa !4
%69 = load double* %51, align 8, !tbaa !4
%70 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 1, i32 0, i32 0, i32 1
store double %69, double* %70, align 8, !tbaa !4
%71 = load double* %48, align 8, !tbaa !4
%72 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 1, i32 0, i32 0, i32 2
store double %71, double* %72, align 8, !tbaa !4
%73 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 1, i32 0
call void @afun(%5* sret %6, %12* %7, %5* %73)
%74 = bitcast %5* %73 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %74, i8* %49, i32 24, i32 8, i1 false), !tbaa.struct !5
%75 = load double* %46, align 8, !tbaa !4
%76 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 1, i32 1, i32 0, i32 0
store double %75, double* %76, align 8, !tbaa !4
%77 = load double* %51, align 8, !tbaa !4
%78 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 1, i32 1, i32 0, i32 1
store double %77, double* %78, align 8, !tbaa !4
%79 = load double* %50, align 8, !tbaa !4
%80 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 1, i32 1, i32 0, i32 2
store double %79, double* %80, align 8, !tbaa !4
%81 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 1, i32 1
call void @afun(%5* sret %6, %12* %7, %5* %81)
%82 = bitcast %5* %81 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %82, i8* %49, i32 24, i32 8, i1 false), !tbaa.struct !5
%83 = load double* %52, align 8, !tbaa !4
%84 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0
store double %83, double* %84, align 8, !tbaa !4
%85 = load double* %47, align 8, !tbaa !4
%86 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 0, i32 0, i32 0, i32 1
store double %85, double* %86, align 8, !tbaa !4
%87 = load double* %48, align 8, !tbaa !4
%88 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 0, i32 0, i32 0, i32 2
store double %87, double* %88, align 8, !tbaa !4
%89 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 0, i32 0
call void @afun(%5* sret %6, %12* %7, %5* %89)
%90 = bitcast %5* %89 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %90, i8* %49, i32 24, i32 8, i1 false), !tbaa.struct !5
%91 = load double* %52, align 8, !tbaa !4
%92 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 0, i32 1, i32 0, i32 0
store double %91, double* %92, align 8, !tbaa !4
%93 = load double* %47, align 8, !tbaa !4
%94 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1
store double %93, double* %94, align 8, !tbaa !4
%95 = load double* %50, align 8, !tbaa !4
%96 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 0, i32 1, i32 0, i32 2
store double %95, double* %96, align 8, !tbaa !4
%97 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 0, i32 1
call void @afun(%5* sret %6, %12* %7, %5* %97)
%98 = bitcast %5* %97 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %98, i8* %49, i32 24, i32 8, i1 false), !tbaa.struct !5
%99 = load double* %52, align 8, !tbaa !4
%100 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 1, i32 0, i32 0, i32 0
store double %99, double* %100, align 8, !tbaa !4
%101 = load double* %51, align 8, !tbaa !4
%102 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1
store double %101, double* %102, align 8, !tbaa !4
%103 = load double* %48, align 8, !tbaa !4
%104 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 1, i32 0, i32 0, i32 2
store double %103, double* %104, align 8, !tbaa !4
%105 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 1, i32 0
call void @afun(%5* sret %6, %12* %7, %5* %105)
%106 = bitcast %5* %105 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %106, i8* %49, i32 24, i32 8, i1 false), !tbaa.struct !5
%107 = load double* %52, align 8, !tbaa !4
%108 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 1, i32 1, i32 0, i32 0
store double %107, double* %108, align 8, !tbaa !4
%109 = load double* %51, align 8, !tbaa !4
%110 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 1, i32 1, i32 0, i32 1
store double %109, double* %110, align 8, !tbaa !4
%111 = load double* %50, align 8, !tbaa !4
%112 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 1, i32 1, i32 0, i32 2
store double %111, double* %112, align 8, !tbaa !4
%113 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 1, i32 1
call void @afun(%5* sret %6, %12* %7, %5* %113)
%114 = bitcast %5* %113 to i8*
call void @llvm.memcpy.p0i8.p0i8.i32(i8* %114, i8* %49, i32 24, i32 8, i1 false), !tbaa.struct !5
%115 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0
%116 = load double* %115, align 8, !tbaa !4
%117 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1
%118 = load double* %117, align 8, !tbaa !4
%119 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 0, i32 0, i32 0, i32 2
%120 = load double* %119, align 8, !tbaa !4
%121 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 0, i32 1, i32 0, i32 0
%122 = load double* %121, align 8, !tbaa !4
%123 = fcmp olt double %122, %116
%124 = select i1 %123, double %122, double %116
%125 = fcmp ogt double %122, %116
%126 = select i1 %125, double %122, double %116
%127 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 0, i32 1, i32 0, i32 1
%128 = load double* %127, align 8, !tbaa !4
%129 = fcmp olt double %128, %118
%130 = select i1 %129, double %128, double %118
%131 = fcmp ogt double %128, %118
%132 = select i1 %131, double %128, double %118
%133 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 0, i32 1, i32 0, i32 2
%134 = load double* %133, align 8, !tbaa !4
%135 = fcmp olt double %134, %120
%136 = select i1 %135, double %134, double %120
%137 = fcmp ogt double %134, %120
%138 = select i1 %137, double %134, double %120
%139 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0
%140 = load double* %139, align 8, !tbaa !4
%141 = fcmp olt double %140, %124
%142 = select i1 %141, double %140, double %124
%143 = fcmp ogt double %140, %126
%144 = select i1 %143, double %140, double %126
%145 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 1, i32 0, i32 0, i32 1
%146 = load double* %145, align 8, !tbaa !4
%147 = fcmp olt double %146, %130
%148 = select i1 %147, double %146, double %130
%149 = fcmp ogt double %146, %132
%150 = select i1 %149, double %146, double %132
%151 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 1, i32 0, i32 0, i32 2
%152 = load double* %151, align 8, !tbaa !4
%153 = fcmp olt double %152, %136
%154 = select i1 %153, double %152, double %136
%155 = fcmp ogt double %152, %138
%156 = select i1 %155, double %152, double %138
%157 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 1, i32 1, i32 0, i32 0
%158 = load double* %157, align 8, !tbaa !4
%159 = fcmp olt double %158, %142
%160 = select i1 %159, double %158, double %142
%161 = fcmp ogt double %158, %144
%162 = select i1 %161, double %158, double %144
%163 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 1, i32 1, i32 0, i32 1
%164 = load double* %163, align 8, !tbaa !4
%165 = fcmp olt double %164, %148
%166 = select i1 %165, double %164, double %148
%167 = fcmp ogt double %164, %150
%168 = select i1 %167, double %164, double %150
%169 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 0, i32 1, i32 1, i32 0, i32 2
%170 = load double* %169, align 8, !tbaa !4
%171 = fcmp olt double %170, %154
%172 = select i1 %171, double %170, double %154
%173 = fcmp ogt double %170, %156
%174 = select i1 %173, double %170, double %156
%175 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0
%176 = load double* %175, align 8, !tbaa !4
%177 = fcmp olt double %176, %160
%178 = select i1 %177, double %176, double %160
%179 = fcmp ogt double %176, %162
%180 = select i1 %179, double %176, double %162
%181 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 0, i32 0, i32 0, i32 1
%182 = load double* %181, align 8, !tbaa !4
%183 = fcmp olt double %182, %166
%184 = select i1 %183, double %182, double %166
%185 = fcmp ogt double %182, %168
%186 = select i1 %185, double %182, double %168
%187 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 0, i32 0, i32 0, i32 2
%188 = load double* %187, align 8, !tbaa !4
%189 = fcmp olt double %188, %172
%190 = select i1 %189, double %188, double %172
%191 = fcmp ogt double %188, %174
%192 = select i1 %191, double %188, double %174
%193 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 0, i32 1, i32 0, i32 0
%194 = load double* %193, align 8, !tbaa !4
%195 = fcmp olt double %194, %178
%196 = select i1 %195, double %194, double %178
%197 = fcmp ogt double %194, %180
%198 = select i1 %197, double %194, double %180
%199 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1
%200 = load double* %199, align 8, !tbaa !4
%201 = fcmp olt double %200, %184
%202 = select i1 %201, double %200, double %184
%203 = fcmp ogt double %200, %186
%204 = select i1 %203, double %200, double %186
%205 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 0, i32 1, i32 0, i32 2
%206 = load double* %205, align 8, !tbaa !4
%207 = fcmp olt double %206, %190
%208 = select i1 %207, double %206, double %190
%209 = fcmp ogt double %206, %192
%210 = select i1 %209, double %206, double %192
%211 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 1, i32 0, i32 0, i32 0
%212 = load double* %211, align 8, !tbaa !4
%213 = fcmp olt double %212, %196
%214 = select i1 %213, double %212, double %196
%215 = fcmp ogt double %212, %198
%216 = select i1 %215, double %212, double %198
%217 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1
%218 = load double* %217, align 8, !tbaa !4
%219 = fcmp olt double %218, %202
%220 = select i1 %219, double %218, double %202
%221 = fcmp ogt double %218, %204
%222 = select i1 %221, double %218, double %204
%223 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 1, i32 0, i32 0, i32 2
%224 = load double* %223, align 8, !tbaa !4
%225 = fcmp olt double %224, %208
%226 = select i1 %225, double %224, double %208
%227 = fcmp ogt double %224, %210
%228 = select i1 %227, double %224, double %210
%229 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 1, i32 1, i32 0, i32 0
%230 = load double* %229, align 8, !tbaa !4
%231 = fcmp olt double %230, %214
%232 = select i1 %231, double %230, double %214
%233 = fcmp ogt double %230, %216
%234 = select i1 %233, double %230, double %216
%235 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 1, i32 1, i32 0, i32 1
%236 = load double* %235, align 8, !tbaa !4
%237 = fcmp olt double %236, %220
%238 = select i1 %237, double %236, double %220
%239 = fcmp ogt double %236, %222
%240 = select i1 %239, double %236, double %222
%241 = getelementptr inbounds [2 x [2 x [2 x %5]]]* %5, i32 0, i32 1, i32 1, i32 1, i32 0, i32 2
%242 = load double* %241, align 8, !tbaa !4
%243 = fcmp olt double %242, %226
%244 = select i1 %243, double %242, double %226
%245 = fcmp ogt double %242, %228
%246 = select i1 %245, double %242, double %228
%247 = getelementptr inbounds %10* %0, i32 0, i32 4, i32 0, i32 0
store double %232, double* %247, align 8
%248 = getelementptr inbounds %10* %0, i32 0, i32 4, i32 0, i32 1
store double %238, double* %248, align 8
%249 = getelementptr inbounds %10* %0, i32 0, i32 4, i32 0, i32 2
store double %244, double* %249, align 8
%250 = getelementptr inbounds %10* %0, i32 0, i32 5, i32 0, i32 0
store double %234, double* %250, align 8
%251 = getelementptr inbounds %10* %0, i32 0, i32 5, i32 0, i32 1
store double %240, double* %251, align 8
%252 = getelementptr inbounds %10* %0, i32 0, i32 5, i32 0, i32 2
store double %246, double* %252, align 8
br label %29
}
declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind
declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind
!0 = metadata !{metadata !"vtable pointer", metadata !1}
!1 = metadata !{metadata !"Simple C/C++ TBAA"}
!2 = metadata !{metadata !"any pointer", metadata !3}
!3 = metadata !{metadata !"omnipotent char", metadata !1}
!4 = metadata !{metadata !"double", metadata !3}
!5 = metadata !{i64 0, i64 24, metadata !3}
!6 = metadata !{metadata !"int", metadata !3}
!7 = metadata !{i64 0, i64 24, metadata !3, i64 24, i64 24, metadata !3, i64 48, i64 24, metadata !3}
More information about the llvm-commits
mailing list