| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 |
| ; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s |
| |
| define void @test(ptr %0, ptr %1, i1 %cond, double %2) { |
| ; CHECK-LABEL: define void @test( |
| ; CHECK-SAME: ptr [[TMP0:%.*]], ptr [[TMP1:%.*]], i1 [[COND:%.*]], double [[TMP2:%.*]]) { |
| ; CHECK-NEXT: [[ITER_CHECK:.*]]: |
| ; CHECK-NEXT: [[TMP3:%.*]] = insertelement <2 x double> poison, double [[TMP2]], i32 0 |
| ; CHECK-NEXT: [[TMP4:%.*]] = shufflevector <2 x double> [[TMP3]], <2 x double> poison, <2 x i32> zeroinitializer |
| ; CHECK-NEXT: br [[DOTLR_PH383_US_US_US_US:label %.*]] |
| ; CHECK: [[_LR_PH383_US_US_US_US:.*:]] |
| ; CHECK-NEXT: [[TMP5:%.*]] = phi <4 x double> [ [[TMP22:%.*]], %[[DOT_CRIT_EDGE384_US_US_US_US:.*]] ], [ zeroinitializer, %[[ITER_CHECK]] ] |
| ; CHECK-NEXT: br i1 false, label %[[DOTLR_PH383_US_US_US_US___CRIT_EDGE384_US_US_US_US_CRIT_EDGE:.*]], label %[[BB6:.*]] |
| ; CHECK: [[_LR_PH383_US_US_US_US___CRIT_EDGE384_US_US_US_US_CRIT_EDGE:.*:]] |
| ; CHECK-NEXT: br label %[[DOT_CRIT_EDGE384_US_US_US_US]] |
| ; CHECK: [[BB6]]: |
| ; CHECK-NEXT: br i1 [[COND]], label %[[BB16:.*]], label %[[BB7:.*]] |
| ; CHECK: [[BB7]]: |
| ; CHECK-NEXT: [[TMP8:%.*]] = load double, ptr [[TMP1]], align 8 |
| ; CHECK-NEXT: [[TMP9:%.*]] = load double, ptr [[TMP0]], align 8 |
| ; CHECK-NEXT: [[TMP10:%.*]] = insertelement <2 x double> poison, double [[TMP9]], i32 0 |
| ; CHECK-NEXT: [[TMP11:%.*]] = shufflevector <2 x double> [[TMP10]], <2 x double> poison, <2 x i32> zeroinitializer |
| ; CHECK-NEXT: [[TMP12:%.*]] = fmul <2 x double> [[TMP11]], <double 1.000000e+00, double 0.000000e+00> |
| ; CHECK-NEXT: [[TMP13:%.*]] = fadd <2 x double> [[TMP12]], zeroinitializer |
| ; CHECK-NEXT: [[TMP14:%.*]] = fadd double [[TMP2]], [[TMP8]] |
| ; CHECK-NEXT: [[TMP15:%.*]] = extractelement <2 x double> [[TMP13]], i32 0 |
| ; CHECK-NEXT: br label %[[BB16]] |
| ; CHECK: [[BB16]]: |
| ; CHECK-NEXT: [[DOT0304_US_US_US_US:%.*]] = phi double [ [[TMP14]], %[[BB7]] ], [ 0.000000e+00, %[[BB6]] ] |
| ; CHECK-NEXT: [[DOT0301_US_US_US_US:%.*]] = phi double [ [[TMP15]], %[[BB7]] ], [ 0.000000e+00, %[[BB6]] ] |
| ; CHECK-NEXT: [[TMP17:%.*]] = phi <2 x double> [ [[TMP13]], %[[BB7]] ], [ [[TMP4]], %[[BB6]] ] |
| ; CHECK-NEXT: [[TMP18:%.*]] = shufflevector <2 x double> [[TMP17]], <2 x double> poison, <4 x i32> <i32 0, i32 poison, i32 poison, i32 1> |
| ; CHECK-NEXT: [[TMP19:%.*]] = insertelement <4 x double> [[TMP18]], double [[DOT0301_US_US_US_US]], i32 1 |
| ; CHECK-NEXT: [[TMP20:%.*]] = insertelement <4 x double> [[TMP19]], double [[DOT0304_US_US_US_US]], i32 2 |
| ; CHECK-NEXT: [[TMP21:%.*]] = fadd <4 x double> [[TMP20]], [[TMP5]] |
| ; CHECK-NEXT: br label %[[DOT_CRIT_EDGE384_US_US_US_US]] |
| ; CHECK: [[__CRIT_EDGE384_US_US_US_US:.*:]] |
| ; CHECK-NEXT: [[TMP22]] = phi <4 x double> [ [[TMP21]], %[[BB16]] ], [ zeroinitializer, %[[DOTLR_PH383_US_US_US_US___CRIT_EDGE384_US_US_US_US_CRIT_EDGE]] ] |
| ; CHECK-NEXT: br [[DOTLR_PH383_US_US_US_US]] |
| ; |
| iter.check: |
| br label %.lr.ph383.us.us.us.us |
| |
| .lr.ph383.us.us.us.us: ; preds = %._crit_edge384.us.us.us.us, %iter.check |
| %.2277404.us.us.us.us = phi double [ %.4279.us.us.us.us, %._crit_edge384.us.us.us.us ], [ 0.000000e+00, %iter.check ] |
| %.2287402.us.us.us.us = phi double [ %.4289.us.us.us.us, %._crit_edge384.us.us.us.us ], [ 0.000000e+00, %iter.check ] |
| %.2292401.us.us.us.us = phi double [ %.4294.us.us.us.us, %._crit_edge384.us.us.us.us ], [ 0.000000e+00, %iter.check ] |
| %.2297400.us.us.us.us = phi double [ %.4299.us.us.us.us, %._crit_edge384.us.us.us.us ], [ 0.000000e+00, %iter.check ] |
| br i1 false, label %.lr.ph383.us.us.us.us.._crit_edge384.us.us.us.us_crit_edge, label %3 |
| |
| .lr.ph383.us.us.us.us.._crit_edge384.us.us.us.us_crit_edge: ; preds = %.lr.ph383.us.us.us.us |
| br label %._crit_edge384.us.us.us.us |
| |
| 3: ; preds = %.lr.ph383.us.us.us.us |
| br i1 %cond, label %11, label %4 |
| |
| 4: ; preds = %3 |
| %5 = load double, ptr %0, align 8 |
| %6 = fmul double %5, 0.000000e+00 |
| %7 = fadd double %6, 0.000000e+00 |
| %8 = fadd double %5, 0.000000e+00 |
| %9 = load double, ptr %1, align 8 |
| %10 = fadd double %2, %9 |
| br label %11 |
| |
| 11: ; preds = %4, %3 |
| %.0311.us.us.us.us = phi double [ %7, %4 ], [ %2, %3 ] |
| %.0304.us.us.us.us = phi double [ %10, %4 ], [ 0.000000e+00, %3 ] |
| %.0301.us.us.us.us = phi double [ %8, %4 ], [ 0.000000e+00, %3 ] |
| %.0257.us.us.us.us = phi double [ %8, %4 ], [ %2, %3 ] |
| %12 = fadd double %.0311.us.us.us.us, %.2277404.us.us.us.us |
| %13 = fadd double %.0257.us.us.us.us, %.2297400.us.us.us.us |
| %14 = fadd double %.0304.us.us.us.us, %.2287402.us.us.us.us |
| %15 = fadd double %.0301.us.us.us.us, %.2292401.us.us.us.us |
| br label %._crit_edge384.us.us.us.us |
| |
| ._crit_edge384.us.us.us.us: ; preds = %11, %.lr.ph383.us.us.us.us.._crit_edge384.us.us.us.us_crit_edge |
| %.4299.us.us.us.us = phi double [ %13, %11 ], [ 0.000000e+00, %.lr.ph383.us.us.us.us.._crit_edge384.us.us.us.us_crit_edge ] |
| %.4294.us.us.us.us = phi double [ %15, %11 ], [ 0.000000e+00, %.lr.ph383.us.us.us.us.._crit_edge384.us.us.us.us_crit_edge ] |
| %.4289.us.us.us.us = phi double [ %14, %11 ], [ 0.000000e+00, %.lr.ph383.us.us.us.us.._crit_edge384.us.us.us.us_crit_edge ] |
| %.4279.us.us.us.us = phi double [ %12, %11 ], [ 0.000000e+00, %.lr.ph383.us.us.us.us.._crit_edge384.us.us.us.us_crit_edge ] |
| br label %.lr.ph383.us.us.us.us |
| } |