diff options
| author | Daniel Sanders <daniel.sanders@imgtec.com> | 2013-09-27 09:44:59 +0000 |
|---|---|---|
| committer | Daniel Sanders <daniel.sanders@imgtec.com> | 2013-09-27 09:44:59 +0000 |
| commit | 36c671e2c7b2eeec111cc7625b36d08f15ce4dd2 (patch) | |
| tree | f3029701e2fd85d75100f2f2b77f003c19941181 /llvm | |
| parent | f4f1a872ca63379efc0562349d9dfcbc90ac4b7f (diff) | |
| download | bcm5719-llvm-36c671e2c7b2eeec111cc7625b36d08f15ce4dd2.tar.gz bcm5719-llvm-36c671e2c7b2eeec111cc7625b36d08f15ce4dd2.zip | |
[mips][msa] Expand all truncstores and loadexts for MSA as well as DSP
llvm-svn: 191496
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Target/Mips/MipsSEISelLowering.cpp | 30 | ||||
| -rw-r--r-- | llvm/test/CodeGen/Mips/msa/basic_operations.ll | 11 | ||||
| -rw-r--r-- | llvm/test/CodeGen/Mips/msa/llvm-stress-sz1-s742806235.ll | 21 |
3 files changed, 48 insertions, 14 deletions
diff --git a/llvm/lib/Target/Mips/MipsSEISelLowering.cpp b/llvm/lib/Target/Mips/MipsSEISelLowering.cpp index 721b58a9e99..2c316e3dd9e 100644 --- a/llvm/lib/Target/Mips/MipsSEISelLowering.cpp +++ b/llvm/lib/Target/Mips/MipsSEISelLowering.cpp @@ -41,6 +41,22 @@ MipsSETargetLowering::MipsSETargetLowering(MipsTargetMachine &TM) if (HasMips64) addRegisterClass(MVT::i64, &Mips::GPR64RegClass); + if (Subtarget->hasDSP() || Subtarget->hasMSA()) { + // Expand all truncating stores and extending loads. + unsigned FirstVT = (unsigned)MVT::FIRST_VECTOR_VALUETYPE; + unsigned LastVT = (unsigned)MVT::LAST_VECTOR_VALUETYPE; + + for (unsigned VT0 = FirstVT; VT0 <= LastVT; ++VT0) { + for (unsigned VT1 = FirstVT; VT1 <= LastVT; ++VT1) + setTruncStoreAction((MVT::SimpleValueType)VT0, + (MVT::SimpleValueType)VT1, Expand); + + setLoadExtAction(ISD::SEXTLOAD, (MVT::SimpleValueType)VT0, Expand); + setLoadExtAction(ISD::ZEXTLOAD, (MVT::SimpleValueType)VT0, Expand); + setLoadExtAction(ISD::EXTLOAD, (MVT::SimpleValueType)VT0, Expand); + } + } + if (Subtarget->hasDSP()) { MVT::SimpleValueType VecTys[2] = {MVT::v2i16, MVT::v4i8}; @@ -58,20 +74,6 @@ MipsSETargetLowering::MipsSETargetLowering(MipsTargetMachine &TM) setOperationAction(ISD::BITCAST, VecTys[i], Legal); } - // Expand all truncating stores and extending loads. - unsigned FirstVT = (unsigned)MVT::FIRST_VECTOR_VALUETYPE; - unsigned LastVT = (unsigned)MVT::LAST_VECTOR_VALUETYPE; - - for (unsigned VT0 = FirstVT; VT0 <= LastVT; ++VT0) { - for (unsigned VT1 = FirstVT; VT1 <= LastVT; ++VT1) - setTruncStoreAction((MVT::SimpleValueType)VT0, - (MVT::SimpleValueType)VT1, Expand); - - setLoadExtAction(ISD::SEXTLOAD, (MVT::SimpleValueType)VT0, Expand); - setLoadExtAction(ISD::ZEXTLOAD, (MVT::SimpleValueType)VT0, Expand); - setLoadExtAction(ISD::EXTLOAD, (MVT::SimpleValueType)VT0, Expand); - } - setTargetDAGCombine(ISD::SHL); setTargetDAGCombine(ISD::SRA); setTargetDAGCombine(ISD::SRL); diff --git a/llvm/test/CodeGen/Mips/msa/basic_operations.ll b/llvm/test/CodeGen/Mips/msa/basic_operations.ll index c626b283878..b0de05d9949 100644 --- a/llvm/test/CodeGen/Mips/msa/basic_operations.ll +++ b/llvm/test/CodeGen/Mips/msa/basic_operations.ll @@ -1,5 +1,6 @@ ; RUN: llc -march=mips -mattr=+msa < %s | FileCheck -check-prefix=MIPS32 %s +@v4i8 = global <4 x i8> <i8 0, i8 0, i8 0, i8 0> @v16i8 = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0> @v8i16 = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0> @v4i32 = global <4 x i32> <i32 0, i32 0, i32 0, i32 0> @@ -454,3 +455,13 @@ define void @insert_v2i64(i64 %a) nounwind { ret void ; MIPS32: .size insert_v2i64 } + +define void @truncstore() nounwind { + ; MIPS32: truncstore: + + store volatile <4 x i8> <i8 -1, i8 -1, i8 -1, i8 -1>, <4 x i8>*@v4i8 + ; TODO: What code should be emitted? + + ret void + ; MIPS32: .size truncstore +} diff --git a/llvm/test/CodeGen/Mips/msa/llvm-stress-sz1-s742806235.ll b/llvm/test/CodeGen/Mips/msa/llvm-stress-sz1-s742806235.ll new file mode 100644 index 00000000000..9eb4ff4f707 --- /dev/null +++ b/llvm/test/CodeGen/Mips/msa/llvm-stress-sz1-s742806235.ll @@ -0,0 +1,21 @@ +; RUN: llc -march=mips < %s +; RUN: llc -march=mips -mattr=+MSA < %s + +; This test originally failed to select code for a truncstore of a +; build_vector. +; It should at least successfully build. + +define void @autogen_SD742806235(i8*, i32*, i64*, i32, i64, i8) { +BB: + %A4 = alloca double + %A3 = alloca double + %A2 = alloca <8 x i8> + %A1 = alloca <4 x float> + %A = alloca i1 + store i8 %5, i8* %0 + store i8 %5, i8* %0 + store i8 %5, i8* %0 + store <8 x i8> <i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1, i8 0, i8 -1>, <8 x i8>* %A2 + store i8 %5, i8* %0 + ret void +} |

