Skip to content
This repository was archived by the owner on Apr 23, 2020. It is now read-only.

Commit 2c43c3b

Browse files
committed
[X86] Add AVX512 support to X86FastISel::X86SelectFPExt and X86FastISel::X86SelectFPTrunc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@316856 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 9a06bd3 commit 2c43c3b

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

lib/Target/X86/X86FastISel.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2473,9 +2473,13 @@ bool X86FastISel::X86SelectFPExtOrFPTrunc(const Instruction *I,
24732473
bool X86FastISel::X86SelectFPExt(const Instruction *I) {
24742474
if (X86ScalarSSEf64 && I->getType()->isDoubleTy() &&
24752475
I->getOperand(0)->getType()->isFloatTy()) {
2476+
bool HasAVX512 = Subtarget->hasAVX512();
24762477
// fpext from float to double.
2477-
unsigned Opc = Subtarget->hasAVX() ? X86::VCVTSS2SDrr : X86::CVTSS2SDrr;
2478-
return X86SelectFPExtOrFPTrunc(I, Opc, &X86::FR64RegClass);
2478+
unsigned Opc =
2479+
HasAVX512 ? X86::VCVTSS2SDZrr
2480+
: Subtarget->hasAVX() ? X86::VCVTSS2SDrr : X86::CVTSS2SDrr;
2481+
return X86SelectFPExtOrFPTrunc(
2482+
I, Opc, HasAVX512 ? &X86::FR64XRegClass : &X86::FR64RegClass);
24792483
}
24802484

24812485
return false;
@@ -2484,9 +2488,13 @@ bool X86FastISel::X86SelectFPExt(const Instruction *I) {
24842488
bool X86FastISel::X86SelectFPTrunc(const Instruction *I) {
24852489
if (X86ScalarSSEf64 && I->getType()->isFloatTy() &&
24862490
I->getOperand(0)->getType()->isDoubleTy()) {
2491+
bool HasAVX512 = Subtarget->hasAVX512();
24872492
// fptrunc from double to float.
2488-
unsigned Opc = Subtarget->hasAVX() ? X86::VCVTSD2SSrr : X86::CVTSD2SSrr;
2489-
return X86SelectFPExtOrFPTrunc(I, Opc, &X86::FR32RegClass);
2493+
unsigned Opc =
2494+
HasAVX512 ? X86::VCVTSD2SSZrr
2495+
: Subtarget->hasAVX() ? X86::VCVTSD2SSrr : X86::CVTSD2SSrr;
2496+
return X86SelectFPExtOrFPTrunc(
2497+
I, Opc, HasAVX512 ? &X86::FR32XRegClass : &X86::FR32RegClass);
24902498
}
24912499

24922500
return false;

test/CodeGen/X86/fast-isel-fptrunc-fpext.ll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
22
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefix=ALL --check-prefix=SSE
33
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefix=ALL --check-prefix=AVX
4+
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f -fast-isel -fast-isel-abort=1 | FileCheck %s --check-prefix=ALL --check-prefix=AVX
45
;
56
; Verify that fast-isel doesn't select legacy SSE instructions on targets that
67
; feature AVX.

0 commit comments

Comments
 (0)