1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-18 18:42:46 +02:00

[SLP] Add test where reduction result is used in PHI.

Test case for PR47670.
This commit is contained in:
Florian Hahn 2020-10-02 13:31:23 +01:00
parent e685fa49f9
commit e9c0a0b891

View File

@ -1626,4 +1626,65 @@ normal:
ret void
}
; Test case from PR47670. Reduction result is used as incoming value in phi.
define i32 @reduction_result_used_in_phi(i32* nocapture readonly %data, i1 zeroext %b) {
; CHECK-LABEL: @reduction_result_used_in_phi(
; CHECK-NEXT: entry:
; CHECK-NEXT: br i1 [[B:%.*]], label [[BB:%.*]], label [[EXIT:%.*]]
; CHECK: bb:
; CHECK-NEXT: [[L_0:%.*]] = load i32, i32* [[DATA:%.*]], align 4
; CHECK-NEXT: [[IDX_1:%.*]] = getelementptr inbounds i32, i32* [[DATA]], i64 1
; CHECK-NEXT: [[L_1:%.*]] = load i32, i32* [[IDX_1]], align 4
; CHECK-NEXT: [[ADD_1:%.*]] = add i32 [[L_1]], [[L_0]]
; CHECK-NEXT: [[IDX_2:%.*]] = getelementptr inbounds i32, i32* [[DATA]], i64 2
; CHECK-NEXT: [[L_2:%.*]] = load i32, i32* [[IDX_2]], align 4
; CHECK-NEXT: [[ADD_2:%.*]] = add i32 [[L_2]], [[ADD_1]]
; CHECK-NEXT: [[IDX_3:%.*]] = getelementptr inbounds i32, i32* [[DATA]], i64 3
; CHECK-NEXT: [[L_3:%.*]] = load i32, i32* [[IDX_3]], align 4
; CHECK-NEXT: [[ADD_3:%.*]] = add i32 [[L_3]], [[ADD_2]]
; CHECK-NEXT: br label [[EXIT]]
; CHECK: exit:
; CHECK-NEXT: [[SUM_1:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[ADD_3]], [[BB]] ]
; CHECK-NEXT: ret i32 [[SUM_1]]
;
; STORE-LABEL: @reduction_result_used_in_phi(
; STORE-NEXT: entry:
; STORE-NEXT: br i1 [[B:%.*]], label [[BB:%.*]], label [[EXIT:%.*]]
; STORE: bb:
; STORE-NEXT: [[L_0:%.*]] = load i32, i32* [[DATA:%.*]], align 4
; STORE-NEXT: [[IDX_1:%.*]] = getelementptr inbounds i32, i32* [[DATA]], i64 1
; STORE-NEXT: [[L_1:%.*]] = load i32, i32* [[IDX_1]], align 4
; STORE-NEXT: [[ADD_1:%.*]] = add i32 [[L_1]], [[L_0]]
; STORE-NEXT: [[IDX_2:%.*]] = getelementptr inbounds i32, i32* [[DATA]], i64 2
; STORE-NEXT: [[L_2:%.*]] = load i32, i32* [[IDX_2]], align 4
; STORE-NEXT: [[ADD_2:%.*]] = add i32 [[L_2]], [[ADD_1]]
; STORE-NEXT: [[IDX_3:%.*]] = getelementptr inbounds i32, i32* [[DATA]], i64 3
; STORE-NEXT: [[L_3:%.*]] = load i32, i32* [[IDX_3]], align 4
; STORE-NEXT: [[ADD_3:%.*]] = add i32 [[L_3]], [[ADD_2]]
; STORE-NEXT: br label [[EXIT]]
; STORE: exit:
; STORE-NEXT: [[SUM_1:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[ADD_3]], [[BB]] ]
; STORE-NEXT: ret i32 [[SUM_1]]
;
entry:
br i1 %b, label %bb, label %exit
bb:
%l.0 = load i32, i32* %data, align 4
%idx.1 = getelementptr inbounds i32, i32* %data, i64 1
%l.1 = load i32, i32* %idx.1, align 4
%add.1 = add i32 %l.1, %l.0
%idx.2 = getelementptr inbounds i32, i32* %data, i64 2
%l.2 = load i32, i32* %idx.2, align 4
%add.2 = add i32 %l.2, %add.1
%idx.3 = getelementptr inbounds i32, i32* %data, i64 3
%l.3 = load i32, i32* %idx.3, align 4
%add.3 = add i32 %l.3, %add.2
br label %exit
exit:
%sum.1 = phi i32 [ 0, %entry ], [ %add.3, %bb]
ret i32 %sum.1
}
declare i32 @__gxx_personality_v0(...)