[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