blob: 958d618a662e809db3894ebf0ed8730080326b1f [file] [log] [blame] [edit]
; 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
}