diff options
| author | Luke Geeson <luke.geeson@arm.com> | 2018-05-31 08:27:53 +0000 |
|---|---|---|
| committer | Luke Geeson <luke.geeson@arm.com> | 2018-05-31 08:27:53 +0000 |
| commit | 2e09995d425ae69aa0f20cf4a5c5db881d71fbf1 (patch) | |
| tree | fc52712172cf3a3ff56a6b189d46591bdfa379ea /llvm/lib/Target/AArch64 | |
| parent | 0bad5be430b2620b46909e23f447f6aabc340145 (diff) | |
| download | bcm5719-llvm-2e09995d425ae69aa0f20cf4a5c5db881d71fbf1.tar.gz bcm5719-llvm-2e09995d425ae69aa0f20cf4a5c5db881d71fbf1.zip | |
[AArch64] Reverted rL333427 fixing Clang UnitTest Failure
llvm-svn: 333634
Diffstat (limited to 'llvm/lib/Target/AArch64')
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64InstrFormats.td | 21 | ||||
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64InstrInfo.td | 23 |
2 files changed, 39 insertions, 5 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64InstrFormats.td b/llvm/lib/Target/AArch64/AArch64InstrFormats.td index 9e5dac5ebab..e4abc479eb7 100644 --- a/llvm/lib/Target/AArch64/AArch64InstrFormats.td +++ b/llvm/lib/Target/AArch64/AArch64InstrFormats.td @@ -7928,6 +7928,26 @@ class BaseSIMDScalarShiftTied<bit U, bits<5> opc, bits<7> fixed_imm, multiclass SIMDFPScalarRShift<bit U, bits<5> opc, string asm> { let Predicates = [HasNEON, HasFullFP16] in { + def HSr : BaseSIMDScalarShift<U, opc, {0,0,1,?,?,?,?}, + FPR16, FPR32, vecshiftR16, asm, []> { + let Inst{19-16} = imm{3-0}; + let Inst{23-22} = 0b11; + } + def SHr : BaseSIMDScalarShift<U, opc, {?,?,?,?,?,?,?}, + FPR32, FPR16, vecshiftR32, asm, []> { + let Inst{19-16} = imm{3-0}; + } + def HDr : BaseSIMDScalarShift<U, opc, {?,?,?,?,?,?,?}, + FPR16, FPR64, vecshiftR32, asm, []> { + let Inst{21-16} = imm{5-0}; + let Inst{23-22} = 0b11; + } + def DHr : BaseSIMDScalarShift<U, opc, {?,?,?,?,?,?,?}, + FPR64, FPR16, vecshiftR64, asm, []> { + let Inst{21-16} = imm{5-0}; + let Inst{23-22} = 0b11; + let Inst{31} = 1; + } def h : BaseSIMDScalarShift<U, opc, {0,0,1,?,?,?,?}, FPR16, FPR16, vecshiftR16, asm, []> { let Inst{19-16} = imm{3-0}; @@ -7937,7 +7957,6 @@ multiclass SIMDFPScalarRShift<bit U, bits<5> opc, string asm> { FPR32, FPR32, vecshiftR32, asm, []> { let Inst{20-16} = imm{4-0}; } - def d : BaseSIMDScalarShift<U, opc, {1,?,?,?,?,?,?}, FPR64, FPR64, vecshiftR64, asm, []> { let Inst{21-16} = imm{5-0}; diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.td b/llvm/lib/Target/AArch64/AArch64InstrInfo.td index e815137ef3b..ac7bc9873c5 100644 --- a/llvm/lib/Target/AArch64/AArch64InstrInfo.td +++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.td @@ -4955,20 +4955,35 @@ def : Pat<(v1i64 (int_aarch64_neon_vcvtfp2fxs (v1f64 FPR64:$Rn), def : Pat<(v1i64 (int_aarch64_neon_vcvtfp2fxu (v1f64 FPR64:$Rn), vecshiftR64:$imm)), (FCVTZUd FPR64:$Rn, vecshiftR64:$imm)>; -def : Pat<(int_aarch64_neon_vcvtfxs2fp FPR32:$Rn, vecshiftR32:$imm), - (SCVTFs FPR32:$Rn, vecshiftR32:$imm)>; +def : Pat<(f16 (int_aarch64_neon_vcvtfxs2fp (i64 FPR64:$Rn), vecshiftR16:$imm)), + (FCVTZSHDr (i64 FPR64:$Rn), vecshiftR32:$imm)>; +def : Pat<(i32 (int_aarch64_neon_vcvtfp2fxu FPR16:$Rn, vecshiftR32:$imm)), + (FCVTZUSHr FPR16:$Rn, vecshiftR32:$imm)>; +def : Pat<(i32 (int_aarch64_neon_vcvtfp2fxs FPR16:$Rn, vecshiftR32:$imm)), + (FCVTZSSHr FPR16:$Rn, vecshiftR32:$imm)>; +def : Pat<(i64 (int_aarch64_neon_vcvtfp2fxs (f16 FPR16:$Rn), vecshiftR64:$imm)), + (FCVTZSDHr (f16 FPR16:$Rn), vecshiftR64:$imm)>; +def : Pat<(f16 (int_aarch64_neon_vcvtfxu2fp FPR32:$Rn, vecshiftR16:$imm)), + (UCVTFHSr FPR32:$Rn, vecshiftR16:$imm)>; def : Pat<(int_aarch64_neon_vcvtfxu2fp FPR32:$Rn, vecshiftR32:$imm), (UCVTFs FPR32:$Rn, vecshiftR32:$imm)>; -def : Pat<(f64 (int_aarch64_neon_vcvtfxs2fp (i64 FPR64:$Rn), vecshiftR64:$imm)), - (SCVTFd FPR64:$Rn, vecshiftR64:$imm)>; def : Pat<(f64 (int_aarch64_neon_vcvtfxu2fp (i64 FPR64:$Rn), vecshiftR64:$imm)), (UCVTFd FPR64:$Rn, vecshiftR64:$imm)>; def : Pat<(v1f64 (int_aarch64_neon_vcvtfxs2fp (v1i64 FPR64:$Rn), vecshiftR64:$imm)), (SCVTFd FPR64:$Rn, vecshiftR64:$imm)>; +def : Pat<(f16 (int_aarch64_neon_vcvtfxs2fp (i32 FPR32:$Rn), vecshiftR16:$imm)), + (SCVTFHSr FPR32:$Rn, vecshiftR16:$imm)>; +def : Pat<(f16 (int_aarch64_neon_vcvtfxs2fp FPR32:$Rn, vecshiftR16:$imm)), + (SCVTFHSr FPR32:$Rn, vecshiftR16:$imm)>; +def : Pat<(f64 (int_aarch64_neon_vcvtfxs2fp (i64 FPR64:$Rn), vecshiftR64:$imm)), + (SCVTFd FPR64:$Rn, vecshiftR64:$imm)>; def : Pat<(v1f64 (int_aarch64_neon_vcvtfxu2fp (v1i64 FPR64:$Rn), vecshiftR64:$imm)), (UCVTFd FPR64:$Rn, vecshiftR64:$imm)>; +def : Pat<(int_aarch64_neon_vcvtfxs2fp FPR32:$Rn, vecshiftR32:$imm), + (SCVTFs FPR32:$Rn, vecshiftR32:$imm)>; + defm SHL : SIMDScalarLShiftD< 0, 0b01010, "shl", AArch64vshl>; defm SLI : SIMDScalarLShiftDTied<1, 0b01010, "sli">; |

