blob: 3534498ec5c878a9cbc100bbafef38cbc833480d [file]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -passes=slp-vectorizer -slp-threshold=-100 -mtriple=x86_64-unknown-linux-gnu -S < %s | FileCheck %s --check-prefixes=VEC
; RUN: opt -passes=slp-vectorizer -slp-threshold=-100 -slp-phi-vectorization-budget=3 -mtriple=x86_64-unknown-linux-gnu -S < %s | FileCheck %s --check-prefixes=BUDGET
define void @phi_bundle(ptr %A, i32 %k) {
; VEC-LABEL: @phi_bundle(
; VEC-NEXT: entry:
; VEC-NEXT: [[TOBOOL:%.*]] = icmp eq i32 [[K:%.*]], 0
; VEC-NEXT: br i1 [[TOBOOL]], label [[IF_ELSE:%.*]], label [[IF_END:%.*]]
; VEC: if.else:
; VEC-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[A:%.*]], i64 10
; VEC-NEXT: [[TMP0:%.*]] = load <2 x double>, ptr [[ARRAYIDX]], align 8
; VEC-NEXT: br label [[IF_END]]
; VEC: if.end:
; VEC-NEXT: [[TMP1:%.*]] = phi <2 x double> [ [[TMP0]], [[IF_ELSE]] ], [ <double 3.000000e+00, double 5.000000e+00>, [[ENTRY:%.*]] ]
; VEC-NEXT: store <2 x double> [[TMP1]], ptr [[A]], align 8
; VEC-NEXT: ret void
;
; BUDGET-LABEL: @phi_bundle(
; BUDGET-NEXT: entry:
; BUDGET-NEXT: [[TOBOOL:%.*]] = icmp eq i32 [[K:%.*]], 0
; BUDGET-NEXT: br i1 [[TOBOOL]], label [[IF_ELSE:%.*]], label [[IF_END:%.*]]
; BUDGET: if.else:
; BUDGET-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[A:%.*]], i64 10
; BUDGET-NEXT: [[TMP0:%.*]] = load double, ptr [[ARRAYIDX]], align 8
; BUDGET-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds double, ptr [[A]], i64 11
; BUDGET-NEXT: [[TMP1:%.*]] = load double, ptr [[ARRAYIDX1]], align 8
; BUDGET-NEXT: br label [[IF_END]]
; BUDGET: if.end:
; BUDGET-NEXT: [[A0_0:%.*]] = phi double [ [[TMP0]], [[IF_ELSE]] ], [ 3.000000e+00, [[ENTRY:%.*]] ]
; BUDGET-NEXT: [[A1_0:%.*]] = phi double [ [[TMP1]], [[IF_ELSE]] ], [ 5.000000e+00, [[ENTRY]] ]
; BUDGET-NEXT: store double [[A0_0]], ptr [[A]], align 8
; BUDGET-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds double, ptr [[A]], i64 1
; BUDGET-NEXT: store double [[A1_0]], ptr [[ARRAYIDX3]], align 8
; BUDGET-NEXT: ret void
;
entry:
%tobool = icmp eq i32 %k, 0
br i1 %tobool, label %if.else, label %if.end
if.else:
%arrayidx = getelementptr inbounds double, ptr %A, i64 10
%0 = load double, ptr %arrayidx, align 8
%arrayidx1 = getelementptr inbounds double, ptr %A, i64 11
%1 = load double, ptr %arrayidx1, align 8
br label %if.end
if.end:
%A0.0 = phi double [ %0, %if.else ], [ 3.000000e+00, %entry ]
%A1.0 = phi double [ %1, %if.else ], [ 5.000000e+00, %entry ]
store double %A0.0, ptr %A, align 8
%arrayidx3 = getelementptr inbounds double, ptr %A, i64 1
store double %A1.0, ptr %arrayidx3, align 8
ret void
}