Skip to content

Commit 157074c

Browse files
author
Leon Clark
committed
Ignore non-simple loads.
1 parent f5c8bf5 commit 157074c

File tree

6 files changed

+55
-41
lines changed

6 files changed

+55
-41
lines changed

clang/test/CodeGen/SystemZ/builtins-systemz-zvector-constrained.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,8 @@ void test_core(void) {
7979
vec_xstd2(vd, idx, ptrd);
8080

8181
vd = vec_splat(vd, 0);
82-
// CHECK: shufflevector <1 x double> %{{.*}}, <1 x double> poison, <2 x i32> zeroinitializer
83-
// CHECK-ASM: vlrepg
82+
// CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> poison, <2 x i32> zeroinitializer
83+
// CHECK-ASM: vrepg
8484
vd = vec_splat(vd, 1);
8585
// CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> poison, <2 x i32> <i32 1, i32 1>
8686
// CHECK-ASM: vrepg

clang/test/CodeGen/SystemZ/builtins-systemz-zvector.c

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -777,80 +777,80 @@ void test_core(void) {
777777
// CHECK: <2 x i64> splat (i64 -4503582447501313)
778778

779779
vsc = vec_splat(vsc, 0);
780-
// CHECK: shufflevector <1 x i8> %{{.*}}, <1 x i8> poison, <16 x i32> zeroinitializer
781-
// CHECK-ASM: vlrepb
780+
// CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> poison, <16 x i32> zeroinitializer
781+
// CHECK-ASM: vrepb
782782
vsc = vec_splat(vsc, 15);
783783
// CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> poison, <16 x i32> <i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15>
784784
// CHECK-ASM: vrepb
785785
vuc = vec_splat(vuc, 0);
786-
// CHECK: store volatile <16 x i8> splat (i8 {{.*}}), ptr @vuc
787-
// CHECK-ASM: vst
786+
// CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> poison, <16 x i32> zeroinitializer
787+
// CHECK-ASM: vrepb
788788
vuc = vec_splat(vuc, 15);
789789
// CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> poison, <16 x i32> <i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15>
790790
// CHECK-ASM: vrepb
791791
vbc = vec_splat(vbc, 0);
792-
// CHECK: shufflevector <1 x i8> %{{.*}}, <1 x i8> poison, <16 x i32> zeroinitializer
793-
// CHECK-ASM: vlrepb
792+
// CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> poison, <16 x i32> zeroinitializer
793+
// CHECK-ASM: vrepb
794794
vbc = vec_splat(vbc, 15);
795795
// CHECK: shufflevector <16 x i8> %{{.*}}, <16 x i8> poison, <16 x i32> <i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15>
796796
// CHECK-ASM: vrepb
797797
vss = vec_splat(vss, 0);
798-
// CHECK: shufflevector <1 x i16> %{{.*}}, <1 x i16> poison, <8 x i32> zeroinitializer
799-
// CHECK-ASM: vlreph
798+
// CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> poison, <8 x i32> zeroinitializer
799+
// CHECK-ASM: vreph
800800
vss = vec_splat(vss, 7);
801801
// CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> poison, <8 x i32> <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7>
802802
// CHECK-ASM: vreph
803803
vus = vec_splat(vus, 0);
804-
// CHECK: store volatile <8 x i16> splat (i16 {{.*}}), ptr @vus
805-
// CHECK-ASM: vst
804+
// CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> poison, <8 x i32> zeroinitializer
805+
// CHECK-ASM: vreph
806806
vus = vec_splat(vus, 7);
807807
// CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> poison, <8 x i32> <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7>
808808
// CHECK-ASM: vreph
809809
vbs = vec_splat(vbs, 0);
810-
// CHECK: shufflevector <1 x i16> %{{.*}}, <1 x i16> poison, <8 x i32> zeroinitializer
811-
// CHECK-ASM: vlreph
810+
// CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> poison, <8 x i32> zeroinitializer
811+
// CHECK-ASM: vreph
812812
vbs = vec_splat(vbs, 7);
813813
// CHECK: shufflevector <8 x i16> %{{.*}}, <8 x i16> poison, <8 x i32> <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7>
814814
// CHECK-ASM: vreph
815815
vsi = vec_splat(vsi, 0);
816-
// CHECK: shufflevector <1 x i32> %{{.*}}, <1 x i32> poison, <4 x i32> zeroinitializer
817-
// CHECK-ASM: vlrepf
816+
// CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> poison, <4 x i32> zeroinitializer
817+
// CHECK-ASM: vrepf
818818
vsi = vec_splat(vsi, 3);
819819
// CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> poison, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
820820
// CHECK-ASM: vrepf
821821
vui = vec_splat(vui, 0);
822-
// CHECK: store volatile <4 x i32> splat (i32 {{.*}}), ptr @vui
823-
// CHECK-ASM: vst
822+
// CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> poison, <4 x i32> zeroinitializer
823+
// CHECK-ASM: vrepf
824824
vui = vec_splat(vui, 3);
825825
// CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> poison, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
826826
// CHECK-ASM: vrepf
827827
vbi = vec_splat(vbi, 0);
828-
// CHECK: shufflevector <1 x i32> %{{.*}}, <1 x i32> poison, <4 x i32> zeroinitializer
829-
// CHECK-ASM: vlrepf
828+
// CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> poison, <4 x i32> zeroinitializer
829+
// CHECK-ASM: vrepf
830830
vbi = vec_splat(vbi, 3);
831831
// CHECK: shufflevector <4 x i32> %{{.*}}, <4 x i32> poison, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
832832
// CHECK-ASM: vrepf
833833
vsl = vec_splat(vsl, 0);
834-
// CHECK: shufflevector <1 x i64> %{{.*}}, <1 x i64> poison, <2 x i32> zeroinitializer
834+
// CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> poison, <2 x i32> zeroinitializer
835835
// CHECK-ASM: vrepg
836836
vsl = vec_splat(vsl, 1);
837837
// CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> poison, <2 x i32> <i32 1, i32 1>
838-
// CHECK-ASM: vst
838+
// CHECK-ASM: vrepg
839839
vul = vec_splat(vul, 0);
840-
// CHECK: store volatile <2 x i64> splat (i64 {{.*}}), ptr @vul
841-
// CHECK-ASM: vst
840+
// CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> poison, <2 x i32> zeroinitializer
841+
// CHECK-ASM: vrepg
842842
vul = vec_splat(vul, 1);
843843
// CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> poison, <2 x i32> <i32 1, i32 1>
844844
// CHECK-ASM: vrepg
845845
vbl = vec_splat(vbl, 0);
846-
// CHECK: shufflevector <1 x i64> %{{.*}}, <1 x i64> poison, <2 x i32> zeroinitializer
847-
// CHECK-ASM: vlrepg
846+
// CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> poison, <2 x i32> zeroinitializer
847+
// CHECK-ASM: vrepg
848848
vbl = vec_splat(vbl, 1);
849849
// CHECK: shufflevector <2 x i64> %{{.*}}, <2 x i64> poison, <2 x i32> <i32 1, i32 1>
850850
// CHECK-ASM: vrepg
851851
vd = vec_splat(vd, 0);
852-
// CHECK: shufflevector <1 x double> %{{.*}}, <1 x double> poison, <2 x i32> zeroinitializer
853-
// CHECK-ASM: vlrepg
852+
// CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> poison, <2 x i32> zeroinitializer
853+
// CHECK-ASM: vrepg
854854
vd = vec_splat(vd, 1);
855855
// CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> poison, <2 x i32> <i32 1, i32 1>
856856
// CHECK-ASM: vrepg

clang/test/CodeGen/SystemZ/builtins-systemz-zvector2-constrained.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -130,14 +130,14 @@ void test_core(void) {
130130
// CHECK-ASM: vst
131131

132132
vf = vec_splat(vf, 0);
133-
// CHECK: shufflevector <1 x float> %{{.*}}, <1 x float> poison, <4 x i32> zeroinitializer
134-
// CHECK-ASM: vlrepf
133+
// CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> poison, <4 x i32> zeroinitializer
134+
// CHECK-ASM: vrepf
135135
vf = vec_splat(vf, 1);
136-
// CHECK: shufflevector <2 x float> %{{.*}}, <2 x float> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
137-
// CHECK-ASM: vst
136+
// CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
137+
// CHECK-ASM: vrepf
138138
vd = vec_splat(vd, 0);
139-
// CHECK: shufflevector <1 x double> %{{.*}}, <1 x double> poison, <2 x i32> zeroinitializer
140-
// CHECK-ASM: vlrepg
139+
// CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> poison, <2 x i32> zeroinitializer
140+
// CHECK-ASM: vrepg
141141
vd = vec_splat(vd, 1);
142142
// CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> poison, <2 x i32> <i32 1, i32 1>
143143
// CHECK-ASM: vrepg

clang/test/CodeGen/SystemZ/builtins-systemz-zvector2.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -254,14 +254,14 @@ void test_core(void) {
254254
// CHECK-ASM: vstrlr
255255

256256
vf = vec_splat(vf, 0);
257-
// CHECK: shufflevector <1 x float> %{{.*}}, <1 x float> poison, <4 x i32> zeroinitializer
258-
// CHECK-ASM: vlrepf
257+
// CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> poison, <4 x i32> zeroinitializer
258+
// CHECK-ASM: vrepf
259259
vf = vec_splat(vf, 1);
260-
// CHECK: shufflevector <2 x float> %{{.*}}, <2 x float> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
261-
// CHECK-ASM: vst
260+
// CHECK: shufflevector <4 x float> %{{.*}}, <4 x float> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
261+
// CHECK-ASM: vrepf
262262
vd = vec_splat(vd, 0);
263-
// CHECK: shufflevector <1 x double> %{{.*}}, <1 x double> poison, <2 x i32> zeroinitializer
264-
// CHECK-ASM: vlrepg
263+
// CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> poison, <2 x i32> zeroinitializer
264+
// CHECK-ASM: vrepg
265265
vd = vec_splat(vd, 1);
266266
// CHECK: shufflevector <2 x double> %{{.*}}, <2 x double> poison, <2 x i32> <i32 1, i32 1>
267267
// CHECK-ASM: vrepg

llvm/lib/Transforms/AggressiveInstCombine/AggressiveInstCombine.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -920,7 +920,7 @@ static bool foldPatternedLoads(Instruction &I, const DataLayout &DL) {
920920
// poison values, attempt to shrink the load to only the lanes being used.
921921
static bool shrinkLoadsForBroadcast(Instruction &I) {
922922
auto *OldLoad = dyn_cast<LoadInst>(&I);
923-
if (!OldLoad)
923+
if (!OldLoad || !OldLoad->isSimple())
924924
return false;
925925

926926
auto *VecTy = dyn_cast<FixedVectorType>(I.getType());

llvm/test/Transforms/AggressiveInstCombine/load-shufflevector.ll

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,20 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
22
; RUN: opt -passes=aggressive-instcombine -S < %s | FileCheck %s
33

4+
define <8 x half> @shuffle_v4_v8f16_r0_1_volatile(ptr addrspace(1) nocapture readonly %arg0) local_unnamed_addr {
5+
; CHECK-LABEL: define <8 x half> @shuffle_v4_v8f16_r0_1_volatile(
6+
; CHECK-SAME: ptr addrspace(1) readonly captures(none) [[ARG0:%.*]]) local_unnamed_addr {
7+
; CHECK-NEXT: [[ENTRY:.*:]]
8+
; CHECK-NEXT: [[TMP0:%.*]] = load volatile <4 x half>, ptr addrspace(1) [[ARG0]], align 32
9+
; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <4 x half> [[TMP0]], <4 x half> poison, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1>
10+
; CHECK-NEXT: ret <8 x half> [[TMP1]]
11+
;
12+
entry:
13+
%val0 = load volatile <4 x half>, ptr addrspace(1) %arg0, align 32
14+
%val1 = shufflevector <4 x half> %val0, <4 x half> poison, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1>
15+
ret <8 x half> %val1
16+
}
17+
418
define <8 x half> @shuffle_v4_v8f16_r0_1(ptr addrspace(1) nocapture readonly %arg0) local_unnamed_addr {
519
; CHECK-LABEL: define <8 x half> @shuffle_v4_v8f16_r0_1(
620
; CHECK-SAME: ptr addrspace(1) readonly captures(none) [[ARG0:%.*]]) local_unnamed_addr {

0 commit comments

Comments
 (0)