summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2018-01-06 21:02:26 +0000
committerCraig Topper <craig.topper@intel.com>2018-01-06 21:02:26 +0000
commit0f4ccb78067578e1666bbd9ea86b417a892ee571 (patch)
treeb02120bf58911277a1531720125770c311d6d6cc
parent90353a9f42a3c99c34cbdaf7d6ea1ab47badccd2 (diff)
downloadbcm5719-llvm-0f4ccb78067578e1666bbd9ea86b417a892ee571.tar.gz
bcm5719-llvm-0f4ccb78067578e1666bbd9ea86b417a892ee571.zip
[X86] Add load folding pattern to EVEX vcvttss2si/vcvtsd2si.
llvm-svn: 321945
-rw-r--r--llvm/lib/Target/X86/X86InstrAVX512.td13
-rw-r--r--llvm/test/CodeGen/X86/avx512-intrinsics.ll10
2 files changed, 17 insertions, 6 deletions
diff --git a/llvm/lib/Target/X86/X86InstrAVX512.td b/llvm/lib/Target/X86/X86InstrAVX512.td
index 3c06ca34fa0..a701471c1af 100644
--- a/llvm/lib/Target/X86/X86InstrAVX512.td
+++ b/llvm/lib/Target/X86/X86InstrAVX512.td
@@ -6616,12 +6616,13 @@ let Predicates = [HasAVX512] in {
[(set _DstRC.RC:$dst, (OpNodeRnd (_SrcRC.VT _SrcRC.RC:$src),
(i32 FROUND_NO_EXC)))], itins.rr>,
EVEX,VEX_LIG , EVEX_B, Sched<[itins.Sched]>;
- let mayLoad = 1, hasSideEffects = 0 in
- def rm_Int : AVX512<opc, MRMSrcMem, (outs _DstRC.RC:$dst),
- (ins _SrcRC.IntScalarMemOp:$src),
- !strconcat(asm,"\t{$src, $dst|$dst, $src}"),
- [], itins.rm>, EVEX, VEX_LIG,
- Sched<[itins.Sched.Folded, ReadAfterLd]>;
+ def rm_Int : AVX512<opc, MRMSrcMem, (outs _DstRC.RC:$dst),
+ (ins _SrcRC.IntScalarMemOp:$src),
+ !strconcat(asm,"\t{$src, $dst|$dst, $src}"),
+ [(set _DstRC.RC:$dst, (OpNodeRnd
+ (_SrcRC.VT _SrcRC.ScalarIntMemCPat:$src),
+ (i32 FROUND_CURRENT)))], itins.rm>,
+ EVEX, VEX_LIG, Sched<[itins.Sched.Folded, ReadAfterLd]>;
def : InstAlias<asm # aliasStr # "\t{$src, $dst|$dst, $src}",
(!cast<Instruction>(NAME # "rr_Int") _DstRC.RC:$dst, _SrcRC.RC:$src), 0>;
diff --git a/llvm/test/CodeGen/X86/avx512-intrinsics.ll b/llvm/test/CodeGen/X86/avx512-intrinsics.ll
index 5faa202c30f..5069b727eda 100644
--- a/llvm/test/CodeGen/X86/avx512-intrinsics.ll
+++ b/llvm/test/CodeGen/X86/avx512-intrinsics.ll
@@ -503,6 +503,16 @@ define i32 @test_x86_avx512_cvttss2si(<4 x float> %a0) {
}
declare i32 @llvm.x86.avx512.cvttss2si(<4 x float>, i32) nounwind readnone
+define i32 @test_x86_avx512_cvttss2si_load(<4 x float>* %a0) {
+; CHECK-LABEL: test_x86_avx512_cvttss2si_load:
+; CHECK: ## %bb.0:
+; CHECK-NEXT: vcvttss2si (%rdi), %eax
+; CHECK-NEXT: retq
+ %a1 = load <4 x float>, <4 x float>* %a0
+ %res = call i32 @llvm.x86.avx512.cvttss2si(<4 x float> %a1, i32 4) ;
+ ret i32 %res
+}
+
define i64 @test_x86_avx512_cvttss2si64(<4 x float> %a0) {
; CHECK-LABEL: test_x86_avx512_cvttss2si64:
; CHECK: ## %bb.0:
OpenPOWER on IntegriCloud