Skip to content

Commit c632ac3

Browse files
committed
[SLP][NFC]Add a test with the gather operand in phi node in gathered loads
1 parent c2b9aa0 commit c632ac3

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu -mcpu=cascadelake < %s | FileCheck %s
3+
4+
%class.btManifoldPoint = type <{ %class.btVector3, %class.btVector3, %class.btVector3, %class.btVector3, %class.btVector3, float, float, float, i32, i32, i32, i32, [4 x i8], ptr, float, i8, [3 x i8], float, float, i32, %class.btVector3, %class.btVector3, [4 x i8] }>
5+
%class.btVector3 = type { [4 x float] }
6+
7+
define void @test(ptr %this, i1 %cmp4.not) {
8+
; CHECK-LABEL: define void @test(
9+
; CHECK-SAME: ptr [[THIS:%.*]], i1 [[CMP4_NOT:%.*]]) #[[ATTR0:[0-9]+]] {
10+
; CHECK-NEXT: [[ENTRY:.*]]:
11+
; CHECK-NEXT: [[NEWPT:%.*]] = alloca [[CLASS_BTMANIFOLDPOINT:%.*]], align 8
12+
; CHECK-NEXT: [[CALL25:%.*]] = load volatile i32, ptr [[NEWPT]], align 4
13+
; CHECK-NEXT: br i1 [[CMP4_NOT]], label %[[IF_ELSE37:.*]], label %[[IF_END46:.*]]
14+
; CHECK: [[IF_ELSE37]]:
15+
; CHECK-NEXT: br label %[[IF_END46]]
16+
; CHECK: [[IF_END46]]:
17+
; CHECK-NEXT: [[TMP0:%.*]] = phi <4 x i64> [ <i64 160, i64 1, i64 0, i64 1>, %[[IF_ELSE37]] ], [ <i64 0, i64 0, i64 1, i64 0>, %[[ENTRY]] ]
18+
; CHECK-NEXT: [[TMP1:%.*]] = insertelement <4 x ptr> poison, ptr [[THIS]], i32 0
19+
; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <4 x ptr> [[TMP1]], <4 x ptr> poison, <4 x i32> zeroinitializer
20+
; CHECK-NEXT: [[TMP3:%.*]] = getelementptr i8, <4 x ptr> [[TMP2]], <4 x i64> [[TMP0]]
21+
; CHECK-NEXT: [[TMP4:%.*]] = getelementptr i8, ptr [[NEWPT]], i64 92
22+
; CHECK-NEXT: [[TMP5:%.*]] = call <4 x i32> @llvm.masked.gather.v4i32.v4p0(<4 x ptr> [[TMP3]], i32 4, <4 x i1> splat (i1 true), <4 x i32> poison)
23+
; CHECK-NEXT: store <4 x i32> [[TMP5]], ptr [[TMP4]], align 4
24+
; CHECK-NEXT: ret void
25+
;
26+
entry:
27+
%newPt = alloca %class.btManifoldPoint, align 8
28+
%call25 = load volatile i32, ptr %newPt, align 4
29+
br i1 %cmp4.not, label %if.else37, label %if.end46
30+
31+
if.else37: ; preds = %entry
32+
br label %if.end46
33+
34+
if.end46: ; preds = %if.else37, %entry
35+
%.sink264 = phi i64 [ 160, %if.else37 ], [ 0, %entry ]
36+
%.sink262 = phi i64 [ 0, %if.else37 ], [ 1, %entry ]
37+
%.sink261 = phi i64 [ 1, %if.else37 ], [ 0, %entry ]
38+
%m_partId038 = getelementptr i8, ptr %this, i64 %.sink264
39+
%m_index042 = getelementptr i8, ptr %this, i64 %.sink262
40+
%m_index144 = getelementptr i8, ptr %this, i64 %.sink261
41+
%.sink = load i32, ptr %m_index144, align 4
42+
%.sink186 = load i32, ptr %m_index042, align 4
43+
%.sink188 = load i32, ptr %m_partId038, align 4
44+
%0 = getelementptr i8, ptr %newPt, i64 92
45+
store i32 %.sink188, ptr %0, align 4
46+
%1 = getelementptr i8, ptr %newPt, i64 96
47+
store i32 %.sink, ptr %1, align 8
48+
%2 = getelementptr i8, ptr %newPt, i64 100
49+
store i32 %.sink186, ptr %2, align 4
50+
%3 = getelementptr i8, ptr %newPt, i64 104
51+
store i32 %.sink, ptr %3, align 8
52+
ret void
53+
}

0 commit comments

Comments
 (0)