1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -basic-aa -slp-vectorizer -S -mtriple=i386-apple-macosx10.8.0 -mcpu=corei7-avx | FileCheck %s 3 4target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128-n8:16:32-S128" 5target triple = "i386-apple-macosx10.8.0" 6 7;int test(double *G) { 8; G[0] = 1+G[5]*4; 9; G[1] = 6+G[6]*3; 10; G[2] = 7+G[5]*4; 11; G[3] = 8+G[6]*4; 12;} 13 14define i32 @test(double* nocapture %G) { 15; CHECK-LABEL: @test( 16; CHECK-NEXT: entry: 17; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds double, double* [[G:%.*]], i64 5 18; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds double, double* [[G]], i64 6 19; CHECK-NEXT: [[TMP0:%.*]] = bitcast double* [[ARRAYIDX]] to <2 x double>* 20; CHECK-NEXT: [[TMP1:%.*]] = load <2 x double>, <2 x double>* [[TMP0]], align 8 21; CHECK-NEXT: [[TMP2:%.*]] = fmul <2 x double> [[TMP1]], <double 4.000000e+00, double 3.000000e+00> 22; CHECK-NEXT: [[TMP3:%.*]] = fadd <2 x double> [[TMP2]], <double 1.000000e+00, double 6.000000e+00> 23; CHECK-NEXT: [[ARRAYIDX5:%.*]] = getelementptr inbounds double, double* [[G]], i64 1 24; CHECK-NEXT: [[TMP4:%.*]] = bitcast double* [[G]] to <2 x double>* 25; CHECK-NEXT: store <2 x double> [[TMP3]], <2 x double>* [[TMP4]], align 8 26; CHECK-NEXT: [[TMP5:%.*]] = extractelement <2 x double> [[TMP2]], i32 0 27; CHECK-NEXT: [[ARRAYIDX9:%.*]] = getelementptr inbounds double, double* [[G]], i64 2 28; CHECK-NEXT: [[TMP6:%.*]] = extractelement <2 x double> [[TMP1]], i32 1 29; CHECK-NEXT: [[MUL11:%.*]] = fmul double [[TMP6]], 4.000000e+00 30; CHECK-NEXT: [[TMP7:%.*]] = insertelement <2 x double> undef, double [[TMP5]], i32 0 31; CHECK-NEXT: [[TMP8:%.*]] = insertelement <2 x double> [[TMP7]], double [[MUL11]], i32 1 32; CHECK-NEXT: [[TMP9:%.*]] = fadd <2 x double> [[TMP8]], <double 7.000000e+00, double 8.000000e+00> 33; CHECK-NEXT: [[ARRAYIDX13:%.*]] = getelementptr inbounds double, double* [[G]], i64 3 34; CHECK-NEXT: [[TMP10:%.*]] = bitcast double* [[ARRAYIDX9]] to <2 x double>* 35; CHECK-NEXT: store <2 x double> [[TMP9]], <2 x double>* [[TMP10]], align 8 36; CHECK-NEXT: ret i32 undef 37; 38entry: 39 %arrayidx = getelementptr inbounds double, double* %G, i64 5 40 %0 = load double, double* %arrayidx, align 8 41 %mul = fmul double %0, 4.000000e+00 42 %add = fadd double %mul, 1.000000e+00 43 store double %add, double* %G, align 8 44 %arrayidx2 = getelementptr inbounds double, double* %G, i64 6 45 %1 = load double, double* %arrayidx2, align 8 46 %mul3 = fmul double %1, 3.000000e+00 47 %add4 = fadd double %mul3, 6.000000e+00 48 %arrayidx5 = getelementptr inbounds double, double* %G, i64 1 49 store double %add4, double* %arrayidx5, align 8 50 %add8 = fadd double %mul, 7.000000e+00 51 %arrayidx9 = getelementptr inbounds double, double* %G, i64 2 52 store double %add8, double* %arrayidx9, align 8 53 %mul11 = fmul double %1, 4.000000e+00 54 %add12 = fadd double %mul11, 8.000000e+00 55 %arrayidx13 = getelementptr inbounds double, double* %G, i64 3 56 store double %add12, double* %arrayidx13, align 8 57 ret i32 undef 58} 59 60;int foo(double *A, int n) { 61; A[0] = A[0] * 7.9 * n + 6.0; 62; A[1] = A[1] * 7.7 * n + 2.0; 63; A[2] = A[2] * 7.6 * n + 3.0; 64; A[3] = A[3] * 7.4 * n + 4.0; 65;} 66 67define i32 @foo(double* nocapture %A, i32 %n) { 68; CHECK-LABEL: @foo( 69; CHECK-NEXT: entry: 70; CHECK-NEXT: [[CONV:%.*]] = sitofp i32 [[N:%.*]] to double 71; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds double, double* [[A:%.*]], i64 1 72; CHECK-NEXT: [[ARRAYIDX9:%.*]] = getelementptr inbounds double, double* [[A]], i64 2 73; CHECK-NEXT: [[ARRAYIDX15:%.*]] = getelementptr inbounds double, double* [[A]], i64 3 74; CHECK-NEXT: [[TMP0:%.*]] = bitcast double* [[A]] to <4 x double>* 75; CHECK-NEXT: [[TMP1:%.*]] = load <4 x double>, <4 x double>* [[TMP0]], align 8 76; CHECK-NEXT: [[TMP2:%.*]] = fmul <4 x double> [[TMP1]], <double 7.900000e+00, double 7.700000e+00, double 7.600000e+00, double 7.400000e+00> 77; CHECK-NEXT: [[TMP3:%.*]] = insertelement <4 x double> undef, double [[CONV]], i32 0 78; CHECK-NEXT: [[TMP4:%.*]] = insertelement <4 x double> [[TMP3]], double [[CONV]], i32 1 79; CHECK-NEXT: [[TMP5:%.*]] = insertelement <4 x double> [[TMP4]], double [[CONV]], i32 2 80; CHECK-NEXT: [[TMP6:%.*]] = insertelement <4 x double> [[TMP5]], double [[CONV]], i32 3 81; CHECK-NEXT: [[TMP7:%.*]] = fmul <4 x double> [[TMP6]], [[TMP2]] 82; CHECK-NEXT: [[TMP8:%.*]] = fadd <4 x double> [[TMP7]], <double 6.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00> 83; CHECK-NEXT: [[TMP9:%.*]] = bitcast double* [[A]] to <4 x double>* 84; CHECK-NEXT: store <4 x double> [[TMP8]], <4 x double>* [[TMP9]], align 8 85; CHECK-NEXT: ret i32 undef 86; 87entry: 88 %0 = load double, double* %A, align 8 89 %mul = fmul double %0, 7.900000e+00 90 %conv = sitofp i32 %n to double 91 %mul1 = fmul double %conv, %mul 92 %add = fadd double %mul1, 6.000000e+00 93 store double %add, double* %A, align 8 94 %arrayidx3 = getelementptr inbounds double, double* %A, i64 1 95 %1 = load double, double* %arrayidx3, align 8 96 %mul4 = fmul double %1, 7.700000e+00 97 %mul6 = fmul double %conv, %mul4 98 %add7 = fadd double %mul6, 2.000000e+00 99 store double %add7, double* %arrayidx3, align 8 100 %arrayidx9 = getelementptr inbounds double, double* %A, i64 2 101 %2 = load double, double* %arrayidx9, align 8 102 %mul10 = fmul double %2, 7.600000e+00 103 %mul12 = fmul double %conv, %mul10 104 %add13 = fadd double %mul12, 3.000000e+00 105 store double %add13, double* %arrayidx9, align 8 106 %arrayidx15 = getelementptr inbounds double, double* %A, i64 3 107 %3 = load double, double* %arrayidx15, align 8 108 %mul16 = fmul double %3, 7.400000e+00 109 %mul18 = fmul double %conv, %mul16 110 %add19 = fadd double %mul18, 4.000000e+00 111 store double %add19, double* %arrayidx15, align 8 112 ret i32 undef 113} 114 115; int test2(double *G, int k) { 116; if (k) { 117; G[0] = 1+G[5]*4; 118; G[1] = 6+G[6]*3; 119; } else { 120; G[2] = 7+G[5]*4; 121; G[3] = 8+G[6]*3; 122; } 123; } 124 125; We can't merge the gather sequences because one does not dominate the other. 126 127define i32 @test2(double* nocapture %G, i32 %k) { 128; CHECK-LABEL: @test2( 129; CHECK-NEXT: [[TMP1:%.*]] = icmp eq i32 [[K:%.*]], 0 130; CHECK-NEXT: [[TMP2:%.*]] = getelementptr inbounds double, double* [[G:%.*]], i64 5 131; CHECK-NEXT: [[TMP3:%.*]] = load double, double* [[TMP2]], align 8 132; CHECK-NEXT: [[TMP4:%.*]] = fmul double [[TMP3]], 4.000000e+00 133; CHECK-NEXT: br i1 [[TMP1]], label [[TMP14:%.*]], label [[TMP5:%.*]] 134; CHECK: 5: 135; CHECK-NEXT: [[TMP6:%.*]] = getelementptr inbounds double, double* [[G]], i64 6 136; CHECK-NEXT: [[TMP7:%.*]] = load double, double* [[TMP6]], align 8 137; CHECK-NEXT: [[TMP8:%.*]] = fmul double [[TMP7]], 3.000000e+00 138; CHECK-NEXT: [[TMP9:%.*]] = insertelement <2 x double> undef, double [[TMP4]], i32 0 139; CHECK-NEXT: [[TMP10:%.*]] = insertelement <2 x double> [[TMP9]], double [[TMP8]], i32 1 140; CHECK-NEXT: [[TMP11:%.*]] = fadd <2 x double> [[TMP10]], <double 1.000000e+00, double 6.000000e+00> 141; CHECK-NEXT: [[TMP12:%.*]] = getelementptr inbounds double, double* [[G]], i64 1 142; CHECK-NEXT: [[TMP13:%.*]] = bitcast double* [[G]] to <2 x double>* 143; CHECK-NEXT: store <2 x double> [[TMP11]], <2 x double>* [[TMP13]], align 8 144; CHECK-NEXT: br label [[TMP24:%.*]] 145; CHECK: 14: 146; CHECK-NEXT: [[TMP15:%.*]] = getelementptr inbounds double, double* [[G]], i64 2 147; CHECK-NEXT: [[TMP16:%.*]] = getelementptr inbounds double, double* [[G]], i64 6 148; CHECK-NEXT: [[TMP17:%.*]] = load double, double* [[TMP16]], align 8 149; CHECK-NEXT: [[TMP18:%.*]] = fmul double [[TMP17]], 3.000000e+00 150; CHECK-NEXT: [[TMP19:%.*]] = insertelement <2 x double> undef, double [[TMP4]], i32 0 151; CHECK-NEXT: [[TMP20:%.*]] = insertelement <2 x double> [[TMP19]], double [[TMP18]], i32 1 152; CHECK-NEXT: [[TMP21:%.*]] = fadd <2 x double> [[TMP20]], <double 7.000000e+00, double 8.000000e+00> 153; CHECK-NEXT: [[TMP22:%.*]] = getelementptr inbounds double, double* [[G]], i64 3 154; CHECK-NEXT: [[TMP23:%.*]] = bitcast double* [[TMP15]] to <2 x double>* 155; CHECK-NEXT: store <2 x double> [[TMP21]], <2 x double>* [[TMP23]], align 8 156; CHECK-NEXT: br label [[TMP24]] 157; CHECK: 24: 158; CHECK-NEXT: ret i32 undef 159; 160 %1 = icmp eq i32 %k, 0 161 %2 = getelementptr inbounds double, double* %G, i64 5 162 %3 = load double, double* %2, align 8 163 %4 = fmul double %3, 4.000000e+00 164 br i1 %1, label %12, label %5 165 166; <label>:5 ; preds = %0 167 %6 = fadd double %4, 1.000000e+00 168 store double %6, double* %G, align 8 169 %7 = getelementptr inbounds double, double* %G, i64 6 170 %8 = load double, double* %7, align 8 171 %9 = fmul double %8, 3.000000e+00 172 %10 = fadd double %9, 6.000000e+00 173 %11 = getelementptr inbounds double, double* %G, i64 1 174 store double %10, double* %11, align 8 175 br label %20 176 177; <label>:12 ; preds = %0 178 %13 = fadd double %4, 7.000000e+00 179 %14 = getelementptr inbounds double, double* %G, i64 2 180 store double %13, double* %14, align 8 181 %15 = getelementptr inbounds double, double* %G, i64 6 182 %16 = load double, double* %15, align 8 183 %17 = fmul double %16, 3.000000e+00 184 %18 = fadd double %17, 8.000000e+00 185 %19 = getelementptr inbounds double, double* %G, i64 3 186 store double %18, double* %19, align 8 187 br label %20 188 189; <label>:20 ; preds = %12, %5 190 ret i32 undef 191} 192 193 194;int foo(double *A, int n) { 195; A[0] = A[0] * 7.9 * n + 6.0; 196; A[1] = A[1] * 7.9 * n + 6.0; 197; A[2] = A[2] * 7.9 * n + 6.0; 198; A[3] = A[3] * 7.9 * n + 6.0; 199;} 200 201define i32 @foo4(double* nocapture %A, i32 %n) { 202; CHECK-LABEL: @foo4( 203; CHECK-NEXT: entry: 204; CHECK-NEXT: [[CONV:%.*]] = sitofp i32 [[N:%.*]] to double 205; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds double, double* [[A:%.*]], i64 1 206; CHECK-NEXT: [[ARRAYIDX9:%.*]] = getelementptr inbounds double, double* [[A]], i64 2 207; CHECK-NEXT: [[ARRAYIDX15:%.*]] = getelementptr inbounds double, double* [[A]], i64 3 208; CHECK-NEXT: [[TMP0:%.*]] = bitcast double* [[A]] to <4 x double>* 209; CHECK-NEXT: [[TMP1:%.*]] = load <4 x double>, <4 x double>* [[TMP0]], align 8 210; CHECK-NEXT: [[TMP2:%.*]] = fmul <4 x double> [[TMP1]], <double 7.900000e+00, double 7.900000e+00, double 7.900000e+00, double 7.900000e+00> 211; CHECK-NEXT: [[TMP3:%.*]] = insertelement <4 x double> undef, double [[CONV]], i32 0 212; CHECK-NEXT: [[TMP4:%.*]] = insertelement <4 x double> [[TMP3]], double [[CONV]], i32 1 213; CHECK-NEXT: [[TMP5:%.*]] = insertelement <4 x double> [[TMP4]], double [[CONV]], i32 2 214; CHECK-NEXT: [[TMP6:%.*]] = insertelement <4 x double> [[TMP5]], double [[CONV]], i32 3 215; CHECK-NEXT: [[TMP7:%.*]] = fmul <4 x double> [[TMP6]], [[TMP2]] 216; CHECK-NEXT: [[TMP8:%.*]] = fadd <4 x double> [[TMP7]], <double 6.000000e+00, double 6.000000e+00, double 6.000000e+00, double 6.000000e+00> 217; CHECK-NEXT: [[TMP9:%.*]] = bitcast double* [[A]] to <4 x double>* 218; CHECK-NEXT: store <4 x double> [[TMP8]], <4 x double>* [[TMP9]], align 8 219; CHECK-NEXT: ret i32 undef 220; 221entry: 222 %0 = load double, double* %A, align 8 223 %mul = fmul double %0, 7.900000e+00 224 %conv = sitofp i32 %n to double 225 %mul1 = fmul double %conv, %mul 226 %add = fadd double %mul1, 6.000000e+00 227 store double %add, double* %A, align 8 228 %arrayidx3 = getelementptr inbounds double, double* %A, i64 1 229 %1 = load double, double* %arrayidx3, align 8 230 %mul4 = fmul double %1, 7.900000e+00 231 %mul6 = fmul double %conv, %mul4 232 %add7 = fadd double %mul6, 6.000000e+00 233 store double %add7, double* %arrayidx3, align 8 234 %arrayidx9 = getelementptr inbounds double, double* %A, i64 2 235 %2 = load double, double* %arrayidx9, align 8 236 %mul10 = fmul double %2, 7.900000e+00 237 %mul12 = fmul double %conv, %mul10 238 %add13 = fadd double %mul12, 6.000000e+00 239 store double %add13, double* %arrayidx9, align 8 240 %arrayidx15 = getelementptr inbounds double, double* %A, i64 3 241 %3 = load double, double* %arrayidx15, align 8 242 %mul16 = fmul double %3, 7.900000e+00 243 %mul18 = fmul double %conv, %mul16 244 %add19 = fadd double %mul18, 6.000000e+00 245 store double %add19, double* %arrayidx15, align 8 246 ret i32 undef 247} 248 249;int partial_mrg(double *A, int n) { 250; A[0] = A[0] * n; 251; A[1] = A[1] * n; 252; if (n < 4) return 0; 253; A[2] = A[2] * n; 254; A[3] = A[3] * (n+4); 255;} 256 257define i32 @partial_mrg(double* nocapture %A, i32 %n) { 258; CHECK-LABEL: @partial_mrg( 259; CHECK-NEXT: entry: 260; CHECK-NEXT: [[CONV:%.*]] = sitofp i32 [[N:%.*]] to double 261; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds double, double* [[A:%.*]], i64 1 262; CHECK-NEXT: [[TMP0:%.*]] = bitcast double* [[A]] to <2 x double>* 263; CHECK-NEXT: [[TMP1:%.*]] = load <2 x double>, <2 x double>* [[TMP0]], align 8 264; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x double> undef, double [[CONV]], i32 0 265; CHECK-NEXT: [[TMP3:%.*]] = insertelement <2 x double> [[TMP2]], double [[CONV]], i32 1 266; CHECK-NEXT: [[TMP4:%.*]] = fmul <2 x double> [[TMP3]], [[TMP1]] 267; CHECK-NEXT: [[TMP5:%.*]] = bitcast double* [[A]] to <2 x double>* 268; CHECK-NEXT: store <2 x double> [[TMP4]], <2 x double>* [[TMP5]], align 8 269; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[N]], 4 270; CHECK-NEXT: br i1 [[CMP]], label [[RETURN:%.*]], label [[IF_END:%.*]] 271; CHECK: if.end: 272; CHECK-NEXT: [[ARRAYIDX7:%.*]] = getelementptr inbounds double, double* [[A]], i64 2 273; CHECK-NEXT: [[ARRAYIDX11:%.*]] = getelementptr inbounds double, double* [[A]], i64 3 274; CHECK-NEXT: [[TMP6:%.*]] = bitcast double* [[ARRAYIDX7]] to <2 x double>* 275; CHECK-NEXT: [[TMP7:%.*]] = load <2 x double>, <2 x double>* [[TMP6]], align 8 276; CHECK-NEXT: [[ADD:%.*]] = add nsw i32 [[N]], 4 277; CHECK-NEXT: [[CONV12:%.*]] = sitofp i32 [[ADD]] to double 278; CHECK-NEXT: [[TMP8:%.*]] = insertelement <2 x double> [[TMP2]], double [[CONV12]], i32 1 279; CHECK-NEXT: [[TMP9:%.*]] = fmul <2 x double> [[TMP8]], [[TMP7]] 280; CHECK-NEXT: [[TMP10:%.*]] = bitcast double* [[ARRAYIDX7]] to <2 x double>* 281; CHECK-NEXT: store <2 x double> [[TMP9]], <2 x double>* [[TMP10]], align 8 282; CHECK-NEXT: br label [[RETURN]] 283; CHECK: return: 284; CHECK-NEXT: ret i32 0 285; 286entry: 287 %0 = load double, double* %A, align 8 288 %conv = sitofp i32 %n to double 289 %mul = fmul double %conv, %0 290 store double %mul, double* %A, align 8 291 %arrayidx2 = getelementptr inbounds double, double* %A, i64 1 292 %1 = load double, double* %arrayidx2, align 8 293 %mul4 = fmul double %conv, %1 294 store double %mul4, double* %arrayidx2, align 8 295 %cmp = icmp slt i32 %n, 4 296 br i1 %cmp, label %return, label %if.end 297 298if.end: ; preds = %entry 299 %arrayidx7 = getelementptr inbounds double, double* %A, i64 2 300 %2 = load double, double* %arrayidx7, align 8 301 %mul9 = fmul double %conv, %2 302 store double %mul9, double* %arrayidx7, align 8 303 %arrayidx11 = getelementptr inbounds double, double* %A, i64 3 304 %3 = load double, double* %arrayidx11, align 8 305 %add = add nsw i32 %n, 4 306 %conv12 = sitofp i32 %add to double 307 %mul13 = fmul double %conv12, %3 308 store double %mul13, double* %arrayidx11, align 8 309 br label %return 310 311return: ; preds = %entry, %if.end 312 ret i32 0 313} 314 315%class.B.53.55 = type { %class.A.52.54, double } 316%class.A.52.54 = type { double, double, double } 317 318@a = external global double, align 8 319 320define void @PR19646(%class.B.53.55* %this) { 321; CHECK-LABEL: @PR19646( 322; CHECK-NEXT: entry: 323; CHECK-NEXT: br i1 undef, label [[IF_END13:%.*]], label [[IF_END13]] 324; CHECK: sw.epilog7: 325; CHECK-NEXT: [[DOTIN:%.*]] = getelementptr inbounds [[CLASS_B_53_55:%.*]], %class.B.53.55* [[THIS:%.*]], i64 0, i32 0, i32 1 326; CHECK-NEXT: [[TMP0:%.*]] = load double, double* [[DOTIN]], align 8 327; CHECK-NEXT: [[ADD:%.*]] = fadd double undef, 0.000000e+00 328; CHECK-NEXT: [[ADD6:%.*]] = fadd double [[ADD]], [[TMP0]] 329; CHECK-NEXT: [[TMP1:%.*]] = load double, double* @a, align 8 330; CHECK-NEXT: [[ADD8:%.*]] = fadd double [[TMP1]], 0.000000e+00 331; CHECK-NEXT: [[_DY:%.*]] = getelementptr inbounds [[CLASS_B_53_55]], %class.B.53.55* [[THIS]], i64 0, i32 0, i32 2 332; CHECK-NEXT: [[TMP2:%.*]] = load double, double* [[_DY]], align 8 333; CHECK-NEXT: [[ADD10:%.*]] = fadd double [[ADD8]], [[TMP2]] 334; CHECK-NEXT: br i1 undef, label [[IF_THEN12:%.*]], label [[IF_END13]] 335; CHECK: if.then12: 336; CHECK-NEXT: [[TMP3:%.*]] = load double, double* undef, align 8 337; CHECK-NEXT: br label [[IF_END13]] 338; CHECK: if.end13: 339; CHECK-NEXT: [[X_1:%.*]] = phi double [ 0.000000e+00, [[IF_THEN12]] ], [ [[ADD6]], [[SW_EPILOG7:%.*]] ], [ undef, [[ENTRY:%.*]] ], [ undef, [[ENTRY]] ] 340; CHECK-NEXT: [[B_0:%.*]] = phi double [ [[TMP3]], [[IF_THEN12]] ], [ [[ADD10]], [[SW_EPILOG7]] ], [ undef, [[ENTRY]] ], [ undef, [[ENTRY]] ] 341; CHECK-NEXT: unreachable 342; 343entry: 344 br i1 undef, label %if.end13, label %if.end13 345 346sw.epilog7: ; No predecessors! 347 %.in = getelementptr inbounds %class.B.53.55, %class.B.53.55* %this, i64 0, i32 0, i32 1 348 %0 = load double, double* %.in, align 8 349 %add = fadd double undef, 0.000000e+00 350 %add6 = fadd double %add, %0 351 %1 = load double, double* @a, align 8 352 %add8 = fadd double %1, 0.000000e+00 353 %_dy = getelementptr inbounds %class.B.53.55, %class.B.53.55* %this, i64 0, i32 0, i32 2 354 %2 = load double, double* %_dy, align 8 355 %add10 = fadd double %add8, %2 356 br i1 undef, label %if.then12, label %if.end13 357 358if.then12: ; preds = %sw.epilog7 359 %3 = load double, double* undef, align 8 360 br label %if.end13 361 362if.end13: ; preds = %if.then12, %sw.epilog7, %entry 363 %x.1 = phi double [ 0.000000e+00, %if.then12 ], [ %add6, %sw.epilog7 ], [ undef, %entry ], [ undef, %entry ] 364 %b.0 = phi double [ %3, %if.then12 ], [ %add10, %sw.epilog7 ], [ undef, %entry], [ undef, %entry ] 365 unreachable 366} 367