mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-17 21:35:07 +00:00
R600: Implement TargetLowering::getVectorIdxTy()
We use MVT::i32 for the vector index type, because we use 32-bit operations to caculate offsets when dynamically indexing vectors. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187749 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
425b76c231
commit
2b272a1c8c
@ -121,6 +121,15 @@ AMDGPUTargetLowering::AMDGPUTargetLowering(TargetMachine &TM) :
|
||||
}
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Target Information
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
MVT AMDGPUTargetLowering::getVectorIdxTy() const {
|
||||
return MVT::i32;
|
||||
}
|
||||
|
||||
|
||||
//===---------------------------------------------------------------------===//
|
||||
// Target Properties
|
||||
//===---------------------------------------------------------------------===//
|
||||
|
@ -51,7 +51,7 @@ public:
|
||||
|
||||
virtual bool isFAbsFree(EVT VT) const;
|
||||
virtual bool isFNegFree(EVT VT) const;
|
||||
|
||||
virtual MVT getVectorIdxTy() const;
|
||||
virtual SDValue LowerReturn(SDValue Chain, CallingConv::ID CallConv,
|
||||
bool isVarArg,
|
||||
const SmallVectorImpl<ISD::OutputArg> &Outs,
|
||||
|
@ -1792,25 +1792,25 @@ multiclass SI_INDIRECT_Pattern <ValueType vt, SI_INDIRECT_DST IndDst> {
|
||||
|
||||
// 1. Extract with offset
|
||||
def : Pat<
|
||||
(vector_extract vt:$vec, (i64 (zext (add i32:$idx, imm:$off)))),
|
||||
(vector_extract vt:$vec, (add i32:$idx, imm:$off)),
|
||||
(f32 (SI_INDIRECT_SRC (IMPLICIT_DEF), $vec, $idx, imm:$off))
|
||||
>;
|
||||
|
||||
// 2. Extract without offset
|
||||
def : Pat<
|
||||
(vector_extract vt:$vec, (i64 (zext i32:$idx))),
|
||||
(vector_extract vt:$vec, i32:$idx),
|
||||
(f32 (SI_INDIRECT_SRC (IMPLICIT_DEF), $vec, $idx, 0))
|
||||
>;
|
||||
|
||||
// 3. Insert with offset
|
||||
def : Pat<
|
||||
(vector_insert vt:$vec, f32:$val, (i64 (zext (add i32:$idx, imm:$off)))),
|
||||
(vector_insert vt:$vec, f32:$val, (add i32:$idx, imm:$off)),
|
||||
(IndDst (IMPLICIT_DEF), $vec, $idx, imm:$off, $val)
|
||||
>;
|
||||
|
||||
// 4. Insert without offset
|
||||
def : Pat<
|
||||
(vector_insert vt:$vec, f32:$val, (i64 (zext i32:$idx))),
|
||||
(vector_insert vt:$vec, f32:$val, i32:$idx),
|
||||
(IndDst (IMPLICIT_DEF), $vec, $idx, 0, $val)
|
||||
>;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user