blob: 688767713b57127db982e601aab5c7cbb1996a1b [file]
; 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 i32 @test(i32 %xor4.i, i32 %xor18.i, i1 %tobool.not.i) {
; CHECK-LABEL: define i32 @test(
; CHECK-SAME: i32 [[XOR4_I:%.*]], i32 [[XOR18_I:%.*]], i1 [[TOBOOL_NOT_I:%.*]]) {
; CHECK-NEXT: [[ENTRY:.*]]:
; CHECK-NEXT: br label %[[BB:.*]]
; CHECK: [[BB]]:
; CHECK-NEXT: [[XOR375678_I:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[XOR37_I:%.*]], %[[BB]] ]
; CHECK-NEXT: [[XOR385777_I:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[XOR35_I:%.*]], %[[BB]] ]
; CHECK-NEXT: [[XOR445876_I:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[AND43_I:%.*]], %[[BB]] ]
; CHECK-NEXT: [[XOR505975_I:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[XOR48_I:%.*]], %[[BB]] ]
; CHECK-NEXT: [[XOR316272_I:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[XOR31_I:%.*]], %[[BB]] ]
; CHECK-NEXT: [[XOR536470_I:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[XOR53_I:%.*]], %[[BB]] ]
; CHECK-NEXT: [[XOR30_I:%.*]] = tail call i32 @llvm.fshl.i32(i32 [[XOR4_I]], i32 1, i32 1)
; CHECK-NEXT: [[XOR31_I]] = xor i32 [[XOR30_I]], [[XOR4_I]]
; CHECK-NEXT: [[XOR11_I:%.*]] = tail call i32 @llvm.fshl.i32(i32 [[XOR4_I]], i32 [[XOR375678_I]], i32 1)
; CHECK-NEXT: [[XOR7_I:%.*]] = tail call i32 @llvm.fshl.i32(i32 [[XOR4_I]], i32 [[XOR316272_I]], i32 1)
; CHECK-NEXT: [[AND22_I:%.*]] = and i32 [[XOR11_I]], [[XOR7_I]]
; CHECK-NEXT: [[XOR23_I:%.*]] = xor i32 [[XOR18_I]], [[AND22_I]]
; CHECK-NEXT: [[XOR32_I:%.*]] = xor i32 [[XOR23_I]], 1
; CHECK-NEXT: [[XOR35_I]] = tail call i32 @llvm.fshl.i32(i32 [[XOR32_I]], i32 [[XOR18_I]], i32 1)
; CHECK-NEXT: [[AND36_I:%.*]] = and i32 [[XOR35_I]], 1
; CHECK-NEXT: [[XOR37_I]] = xor i32 [[AND36_I]], 1
; CHECK-NEXT: [[XOR14_I:%.*]] = tail call i32 @llvm.fshl.i32(i32 1, i32 [[XOR536470_I]], i32 1)
; CHECK-NEXT: [[AND_I:%.*]] = and i32 [[XOR14_I]], [[XOR11_I]]
; CHECK-NEXT: [[TMP0:%.*]] = xor i32 [[XOR4_I]], [[AND_I]]
; CHECK-NEXT: [[XOR39_I:%.*]] = xor i32 [[TMP0]], 1
; CHECK-NEXT: [[XOR42_I:%.*]] = tail call i32 @llvm.fshl.i32(i32 [[XOR39_I]], i32 [[XOR23_I]], i32 1)
; CHECK-NEXT: [[AND43_I]] = and i32 [[XOR42_I]], [[XOR4_I]]
; CHECK-NEXT: [[XOR15_I:%.*]] = xor i32 [[XOR536470_I]], [[XOR4_I]]
; CHECK-NEXT: [[XOR18_I3:%.*]] = tail call i32 @llvm.fshl.i32(i32 1, i32 [[XOR15_I]], i32 1)
; CHECK-NEXT: [[AND25_I:%.*]] = and i32 [[XOR7_I]], [[XOR18_I3]]
; CHECK-NEXT: [[TMP1:%.*]] = xor i32 [[AND25_I]], [[XOR4_I]]
; CHECK-NEXT: [[XOR45_I:%.*]] = xor i32 [[TMP1]], 1
; CHECK-NEXT: [[XOR48_I]] = tail call i32 @llvm.fshl.i32(i32 [[XOR45_I]], i32 1, i32 1)
; CHECK-NEXT: [[XOR53_I]] = xor i32 [[XOR4_I]], 1
; CHECK-NEXT: br i1 [[TOBOOL_NOT_I]], label %[[EXIT:.*]], label %[[BB]]
; CHECK: [[EXIT]]:
; CHECK-NEXT: [[TMP2:%.*]] = xor i32 [[XOR385777_I]], [[XOR445876_I]]
; CHECK-NEXT: [[TMP3:%.*]] = xor i32 [[TMP2]], [[XOR505975_I]]
; CHECK-NEXT: [[XOR2_I:%.*]] = xor i32 [[TMP3]], [[XOR375678_I]]
; CHECK-NEXT: ret i32 [[XOR2_I]]
;
entry:
br label %bb
bb:
%xor375678.i = phi i32 [ 0, %entry ], [ %xor37.i, %bb ]
%xor385777.i = phi i32 [ 0, %entry ], [ %xor35.i, %bb ]
%xor445876.i = phi i32 [ 0, %entry ], [ %and43.i, %bb ]
%xor505975.i = phi i32 [ 0, %entry ], [ %xor48.i, %bb ]
%xor316272.i = phi i32 [ 0, %entry ], [ %xor31.i, %bb ]
%xor536470.i = phi i32 [ 0, %entry ], [ %xor53.i, %bb ]
%xor30.i = tail call i32 @llvm.fshl.i32(i32 %xor4.i, i32 1, i32 1)
%xor31.i = xor i32 %xor30.i, %xor4.i
%xor11.i = tail call i32 @llvm.fshl.i32(i32 %xor4.i, i32 %xor375678.i, i32 1)
%xor7.i = tail call i32 @llvm.fshl.i32(i32 %xor4.i, i32 %xor316272.i, i32 1)
%and22.i = and i32 %xor11.i, %xor7.i
%xor23.i = xor i32 %xor18.i, %and22.i
%xor32.i = xor i32 %xor23.i, 1
%xor35.i = tail call i32 @llvm.fshl.i32(i32 %xor32.i, i32 %xor18.i, i32 1)
%and36.i = and i32 %xor35.i, 1
%xor37.i = xor i32 %and36.i, 1
%xor14.i = tail call i32 @llvm.fshl.i32(i32 1, i32 %xor536470.i, i32 1)
%and.i = and i32 %xor14.i, %xor11.i
%0 = xor i32 %xor4.i, %and.i
%xor39.i = xor i32 %0, 1
%xor42.i = tail call i32 @llvm.fshl.i32(i32 %xor39.i, i32 %xor23.i, i32 1)
%and43.i = and i32 %xor42.i, %xor4.i
%xor15.i = xor i32 %xor536470.i, %xor4.i
%xor18.i3 = tail call i32 @llvm.fshl.i32(i32 1, i32 %xor15.i, i32 1)
%and25.i = and i32 %xor7.i, %xor18.i3
%1 = xor i32 %and25.i, %xor4.i
%xor45.i = xor i32 %1, 1
%xor48.i = tail call i32 @llvm.fshl.i32(i32 %xor45.i, i32 1, i32 1)
%xor53.i = xor i32 %xor4.i, 1
br i1 %tobool.not.i, label %exit, label %bb
exit:
%2 = xor i32 %xor385777.i, %xor445876.i
%3 = xor i32 %2, %xor505975.i
%xor2.i = xor i32 %3, %xor375678.i
ret i32 %xor2.i
}
declare i32 @llvm.fshl.i32(i32, i32, i32)