Skip to content

Commit adce747

Browse files
committed
add test; address comments
1 parent 3c3d2b8 commit adce747

File tree

2 files changed

+53
-8
lines changed

2 files changed

+53
-8
lines changed

llvm/lib/Transforms/Vectorize/VectorCombine.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1805,10 +1805,6 @@ bool VectorCombine::scalarizeLoadExtract(Instruction &I) {
18051805
// erased in the correct order.
18061806
Worklist.push(LI);
18071807

1808-
LLVMContext &ctx = LI->getContext();
1809-
unsigned aliasScopeKind = ctx.getMDKindID("alias.scope");
1810-
unsigned noAliasKind = ctx.getMDKindID("noalias");
1811-
18121808
// Replace extracts with narrow scalar loads.
18131809
for (User *U : LI->users()) {
18141810
auto *EI = cast<ExtractElementInst>(U);
@@ -1829,12 +1825,12 @@ bool VectorCombine::scalarizeLoadExtract(Instruction &I) {
18291825
LI->getAlign(), VecTy->getElementType(), Idx, *DL);
18301826
NewLoad->setAlignment(ScalarOpAlignment);
18311827

1832-
if (MDNode *aliasScope = LI->getMetadata(aliasScopeKind)) {
1833-
NewLoad->setMetadata(aliasScopeKind, aliasScope);
1828+
if (MDNode *aliasScope = LI->getMetadata(LLVMContext::MD_alias_scope)) {
1829+
NewLoad->setMetadata(LLVMContext::MD_alias_scope, aliasScope);
18341830
}
18351831

1836-
if (MDNode *noAlias = LI->getMetadata(noAliasKind)) {
1837-
NewLoad->setMetadata(noAliasKind, noAlias);
1832+
if (MDNode *noAlias = LI->getMetadata(LLVMContext::MD_noalias)) {
1833+
NewLoad->setMetadata(LLVMContext::MD_noalias, noAlias);
18381834
}
18391835

18401836
replaceValue(*EI, *NewLoad);
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt < %s -passes=vector-combine -S | FileCheck %s --check-prefixes=CHECK
3+
4+
define <4 x i32> @quux(ptr addrspace(3) %arg) {
5+
; CHECK-LABEL: define <4 x i32> @quux(
6+
; CHECK-SAME: ptr addrspace(3) [[ARG:%.*]]) {
7+
; CHECK-NEXT: [[BB:.*:]]
8+
; CHECK-NEXT: [[EXTRACTELEMENT:%.*]] = load i8, ptr addrspace(3) [[ARG]], align 4, !alias.scope [[META0:![0-9]+]], !noalias [[META0]]
9+
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds <4 x i8>, ptr addrspace(3) [[ARG]], i32 0, i64 1
10+
; CHECK-NEXT: [[EXTRACTELEMENT1:%.*]] = load i8, ptr addrspace(3) [[TMP0]], align 1, !alias.scope [[META0]], !noalias [[META0]]
11+
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds <4 x i8>, ptr addrspace(3) [[ARG]], i32 0, i64 2
12+
; CHECK-NEXT: [[EXTRACTELEMENT2:%.*]] = load i8, ptr addrspace(3) [[TMP1]], align 2, !alias.scope [[META0]], !noalias [[META0]]
13+
; CHECK-NEXT: [[TMP2:%.*]] = getelementptr inbounds <4 x i8>, ptr addrspace(3) [[ARG]], i32 0, i64 3
14+
; CHECK-NEXT: [[EXTRACTELEMENT3:%.*]] = load i8, ptr addrspace(3) [[TMP2]], align 1, !alias.scope [[META0]], !noalias [[META0]]
15+
; CHECK-NEXT: [[ZEXT:%.*]] = zext i8 [[EXTRACTELEMENT]] to i32
16+
; CHECK-NEXT: [[ZEXT4:%.*]] = zext i8 [[EXTRACTELEMENT1]] to i32
17+
; CHECK-NEXT: [[ZEXT5:%.*]] = zext i8 [[EXTRACTELEMENT2]] to i32
18+
; CHECK-NEXT: [[ZEXT6:%.*]] = zext i8 [[EXTRACTELEMENT3]] to i32
19+
; CHECK-NEXT: [[INSERTELEMENT:%.*]] = insertelement <4 x i32> poison, i32 [[ZEXT]], i64 0
20+
; CHECK-NEXT: [[INSERTELEMENT7:%.*]] = insertelement <4 x i32> [[INSERTELEMENT]], i32 [[ZEXT4]], i64 1
21+
; CHECK-NEXT: [[INSERTELEMENT8:%.*]] = insertelement <4 x i32> [[INSERTELEMENT7]], i32 [[ZEXT5]], i64 2
22+
; CHECK-NEXT: [[INSERTELEMENT9:%.*]] = insertelement <4 x i32> [[INSERTELEMENT8]], i32 [[ZEXT6]], i64 3
23+
; CHECK-NEXT: ret <4 x i32> [[INSERTELEMENT9]]
24+
;
25+
bb:
26+
%load = load <4 x i8>, ptr addrspace(3) %arg, align 4, !alias.scope !0, !noalias !0
27+
%extractelement = extractelement <4 x i8> %load, i64 0
28+
%extractelement1 = extractelement <4 x i8> %load, i64 1
29+
%extractelement2 = extractelement <4 x i8> %load, i64 2
30+
%extractelement3 = extractelement <4 x i8> %load, i64 3
31+
%zext = zext i8 %extractelement to i32
32+
%zext4 = zext i8 %extractelement1 to i32
33+
%zext5 = zext i8 %extractelement2 to i32
34+
%zext6 = zext i8 %extractelement3 to i32
35+
%insertelement = insertelement <4 x i32> poison, i32 %zext, i64 0
36+
%insertelement7 = insertelement <4 x i32> %insertelement, i32 %zext4, i64 1
37+
%insertelement8 = insertelement <4 x i32> %insertelement7, i32 %zext5, i64 2
38+
%insertelement9 = insertelement <4 x i32> %insertelement8, i32 %zext6, i64 3
39+
ret <4 x i32> %insertelement9
40+
}
41+
42+
!0 = !{!1}
43+
!1 = distinct !{!1, !2}
44+
!2 = distinct !{!2}
45+
;.
46+
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
47+
; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
48+
; CHECK: [[META2]] = distinct !{[[META2]]}
49+
;.

0 commit comments

Comments
 (0)