mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-14 15:28:20 +00:00
X86 cost model: Exit before calling getSimpleVT on non-simple VTs
getSimpleVT can only handle simple value types. radar://13676022 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179714 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -371,6 +371,10 @@ unsigned X86TTI::getCastInstrCost(unsigned Opcode, Type *Dst, Type *Src) const {
|
|||||||
EVT SrcTy = TLI->getValueType(Src);
|
EVT SrcTy = TLI->getValueType(Src);
|
||||||
EVT DstTy = TLI->getValueType(Dst);
|
EVT DstTy = TLI->getValueType(Dst);
|
||||||
|
|
||||||
|
// The function getSimpleVT only handles simple value types.
|
||||||
|
if (!SrcTy.isSimple() || !DstTy.isSimple())
|
||||||
|
return TargetTransformInfo::getCastInstrCost(Opcode, Dst, Src);
|
||||||
|
|
||||||
static const TypeConversionCostTblEntry<MVT> AVXConversionTbl[] = {
|
static const TypeConversionCostTblEntry<MVT> AVXConversionTbl[] = {
|
||||||
{ ISD::SIGN_EXTEND, MVT::v8i32, MVT::v8i16, 1 },
|
{ ISD::SIGN_EXTEND, MVT::v8i32, MVT::v8i16, 1 },
|
||||||
{ ISD::ZERO_EXTEND, MVT::v8i32, MVT::v8i16, 1 },
|
{ ISD::ZERO_EXTEND, MVT::v8i32, MVT::v8i16, 1 },
|
||||||
|
@@ -1,6 +1,11 @@
|
|||||||
; RUN: llc -mtriple=x86_64-apple-darwin -mcpu=core2 < %s | FileCheck --check-prefix=SSE2-CODEGEN %s
|
; RUN: llc -mtriple=x86_64-apple-darwin -mcpu=core2 < %s | FileCheck --check-prefix=SSE2-CODEGEN %s
|
||||||
; RUN: opt -mtriple=x86_64-apple-darwin -mcpu=core2 -cost-model -analyze < %s | FileCheck --check-prefix=SSE2 %s
|
; RUN: opt -mtriple=x86_64-apple-darwin -mcpu=core2 -cost-model -analyze < %s | FileCheck --check-prefix=SSE2 %s
|
||||||
|
|
||||||
|
; In X86TargetTransformInfo::getCastInstrCost we have code that depends on
|
||||||
|
; getSimpleVT on a value type. On AVX2 we execute this code. Make sure we exit
|
||||||
|
; early if the type is not a simple value type before we call this function.
|
||||||
|
; RUN: opt -mtriple=x86_64-apple-darwin -mcpu=core-avx2 -cost-model -analyze < %s
|
||||||
|
|
||||||
define <2 x double> @uitofpv2i8v2double(<2 x i8> %a) {
|
define <2 x double> @uitofpv2i8v2double(<2 x i8> %a) {
|
||||||
; SSE2: uitofpv2i8v2double
|
; SSE2: uitofpv2i8v2double
|
||||||
; SSE2: cost of 20 {{.*}} uitofp
|
; SSE2: cost of 20 {{.*}} uitofp
|
||||||
@@ -360,3 +365,4 @@ define <32 x float> @uitofpv32i64v32float(<32 x i64> %a) {
|
|||||||
%1 = uitofp <32 x i64> %a to <32 x float>
|
%1 = uitofp <32 x i64> %a to <32 x float>
|
||||||
ret <32 x float> %1
|
ret <32 x float> %1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user