llvm-project/llvm/lib/Target/Mips
Petar Jovanovic 2b6fe3ffa6 [mips][msa] Mask vectors holding shift amounts
Masked vectors which hold shift amounts when creating the following nodes:
ISD::SHL, ISD::SRL or ISD::SRA.
Instructions that use said nodes, which have had their arguments altered are
sll, srl, sra, bneg, bclr and bset.

For said instructions, the shift amount or the bit position that is
specified in the corresponding vector elements will be interpreted as the
shift amount/bit position modulo the size of the element in bits.

The problem lies in compiling with -O2 enabled, where the instructions for
formats .w and .d are not generated, but are instead optimized away.
In this case, having shift amounts that are either negative or greater than
the element bit size results in generation of incorrect results when
constant folding.

We remedy this by masking the operands for the nodes mentioned above before
actually creating them, so that the final result is correct before placed
into the constant pool.

Patch by Stefan Maksimovic.

Differential Revision: https://reviews.llvm.org/D31331

llvm-svn: 300839
2017-04-20 13:26:46 +00:00
..
AsmParser [mips] Fix 64bit slt/sltu/nor with immediates 2017-02-28 15:55:23 +00:00
Disassembler [Mips] Fix for decoding DINS instruction - disassembler 2017-03-23 13:19:04 +00:00
InstPrinter Revert "[mips] Fix c.<cc>.<fmt> instruction definition." 2016-09-09 11:06:01 +00:00
MCTargetDesc Distinguish between code pointer size and DataLayout::getPointerSize() in DWARF info generation 2017-04-17 17:41:25 +00:00
TargetInfo Move the global variables representing each Target behind accessor function 2016-10-09 23:00:34 +00:00
CMakeLists.txt [mips] Revert fixes for PR32020. 2017-03-09 14:03:26 +00:00
LLVMBuild.txt
MSA.txt Revert: r286868 - Test commit 2016-11-14 19:10:56 +00:00
MicroMips32r6InstrFormats.td
MicroMips32r6InstrInfo.td [mips] seb, seh instruction aliases 2016-11-22 19:17:23 +00:00
MicroMips64r6InstrFormats.td [mips][microMIPS] Implement DBITSWAP, DLSA and LWUPC and add tests for AUI instructions 2016-09-08 07:41:43 +00:00
MicroMips64r6InstrInfo.td [mips] Recommit: "N64 static relocation model support" 2017-01-27 11:36:52 +00:00
MicroMipsDSPInstrFormats.td
MicroMipsDSPInstrInfo.td
MicroMipsInstrFPU.td [mips] Correct c.cond.fmt instruction definition. 2017-01-16 13:55:58 +00:00
MicroMipsInstrFormats.td [mips] Correct c.cond.fmt instruction definition. 2017-01-16 13:55:58 +00:00
MicroMipsInstrInfo.td [mips][ias] Further relax operands of certain assembly instructions 2017-02-23 12:40:58 +00:00
Mips.h [mips] Revert fixes for PR32020. 2017-03-09 14:03:26 +00:00
Mips.td [mips] Recommit: "N64 static relocation model support" 2017-01-27 11:36:52 +00:00
Mips16FrameLowering.cpp Move FrameInstructions from MachineModuleInfo to MachineFunction 2016-11-30 23:48:42 +00:00
Mips16FrameLowering.h
Mips16HardFloat.cpp Module::getOrInsertFunction is using C-style vararg instead of variadic templates. 2017-04-11 15:01:18 +00:00
Mips16HardFloatInfo.cpp
Mips16HardFloatInfo.h
Mips16ISelDAGToDAG.cpp [mips] Preparatory work for a generic scheduler 2016-08-24 13:00:47 +00:00
Mips16ISelDAGToDAG.h
Mips16ISelLowering.cpp
Mips16ISelLowering.h
Mips16InstrFormats.td
Mips16InstrInfo.cpp Use StringRef instead of raw pointers in MCAsmInfo/MCInstrInfo APIs (NFC) 2016-10-01 06:46:33 +00:00
Mips16InstrInfo.h
Mips16InstrInfo.td [mips] Correct mips16 return instructions definitions 2017-02-14 21:53:23 +00:00
Mips16RegisterInfo.cpp MachineFunction: Return reference for getFrameInfo(); NFC 2016-07-28 18:40:00 +00:00
Mips16RegisterInfo.h
Mips32r6InstrFormats.td [mips] Add IAS support for dvp, evp 2016-10-13 12:12:56 +00:00
Mips32r6InstrInfo.td [mips] divide macro instruction cleanup. 2017-02-13 16:06:48 +00:00
Mips64InstrInfo.td [Mips] Add support to match more patterns for DEXT and CINS 2017-03-15 13:10:08 +00:00
Mips64r6InstrInfo.td [mips] Fix aui/daui/dahi/dati for MIPSR6 2016-10-14 09:31:42 +00:00
MipsAnalyzeImmediate.cpp
MipsAnalyzeImmediate.h
MipsAsmPrinter.cpp [LLVM][XRAY][MIPS] Support xray on mips/mipsel/mips64/mips64el 2017-02-15 10:48:11 +00:00
MipsAsmPrinter.h [LLVM][XRAY][MIPS] Support xray on mips/mipsel/mips64/mips64el 2017-02-15 10:48:11 +00:00
MipsCCState.cpp Revert "[SelectionDAG] Enable target specific vector scalarization of calls and returns" 2017-04-07 17:25:05 +00:00
MipsCCState.h Revert "[SelectionDAG] Enable target specific vector scalarization of calls and returns" 2017-04-07 17:25:05 +00:00
MipsCallingConv.td Revert "[SelectionDAG] Enable target specific vector scalarization of calls and returns" 2017-04-07 17:25:05 +00:00
MipsCondMov.td Revert "[mips] Fix c.<cc>.<fmt> instruction definition." 2016-09-09 11:06:01 +00:00
MipsConstantIslandPass.cpp [Mips] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-01-30 23:21:32 +00:00
MipsDSPInstrFormats.td
MipsDSPInstrInfo.td
MipsDelaySlotFiller.cpp [Mips] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-02-01 01:22:51 +00:00
MipsEVAInstrFormats.td [mips] Add IAS support for dvp, evp 2016-10-13 12:12:56 +00:00
MipsEVAInstrInfo.td
MipsFastISel.cpp [Mips] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-01-30 23:21:32 +00:00
MipsFrameLowering.cpp MachineFunction: Return reference for getFrameInfo(); NFC 2016-07-28 18:40:00 +00:00
MipsFrameLowering.h
MipsHazardSchedule.cpp [mips] Deal with empty blocks in the mips hazard scheduler 2017-04-04 11:28:53 +00:00
MipsISelDAGToDAG.cpp [mips] Clang generates unaligned offset for MSA instruction st.d 2016-08-01 06:46:20 +00:00
MipsISelDAGToDAG.h Use StringRef in Pass/PassManager APIs (NFC) 2016-10-01 02:56:57 +00:00
MipsISelLowering.cpp Revert "[SelectionDAG] Enable target specific vector scalarization of calls and returns" 2017-04-07 17:25:05 +00:00
MipsISelLowering.h Revert "[SelectionDAG] Enable target specific vector scalarization of calls and returns" 2017-04-07 17:25:05 +00:00
MipsInstrFPU.td [mips] Correct c.cond.fmt instruction definition. 2017-01-16 13:55:58 +00:00
MipsInstrFormats.td [mips] Correct c.cond.fmt instruction definition. 2017-01-16 13:55:58 +00:00
MipsInstrInfo.cpp [mips][msa] Prevent output operand from commuting for dpadd_[su].df ins 2017-03-31 14:31:55 +00:00
MipsInstrInfo.h [mips][msa] Prevent output operand from commuting for dpadd_[su].df ins 2017-03-31 14:31:55 +00:00
MipsInstrInfo.td [Mips] Add support to match more patterns for DEXT and CINS 2017-03-15 13:10:08 +00:00
MipsLongBranch.cpp [Mips] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-02-01 01:22:51 +00:00
MipsMCInstLower.cpp
MipsMCInstLower.h
MipsMSAInstrFormats.td
MipsMSAInstrInfo.td [mips][msa] Mask vectors holding shift amounts 2017-04-20 13:26:46 +00:00
MipsMachineFunction.cpp [Mips] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-01-30 23:21:32 +00:00
MipsMachineFunction.h [Mips] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-01-30 23:21:32 +00:00
MipsModuleISelDAGToDAG.cpp Use StringRef in Pass/PassManager APIs (NFC) 2016-10-01 02:56:57 +00:00
MipsOptimizePICCall.cpp [mips] Do not allow -opt-bisect-limit to skip the PIC call optimization pass. 2016-10-27 15:50:36 +00:00
MipsOptionRecord.h [Mips] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-02-01 01:22:51 +00:00
MipsOs16.cpp Remove getArgumentList() in favor of arg_begin(), args(), etc 2017-03-16 22:59:15 +00:00
MipsRegisterInfo.cpp Revert "[SelectionDAG] Enable target specific vector scalarization of calls and returns" 2017-04-07 17:25:05 +00:00
MipsRegisterInfo.h
MipsRegisterInfo.td [mips] divide macro instruction cleanup. 2017-02-13 16:06:48 +00:00
MipsSEFrameLowering.cpp [Mips] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-02-01 01:22:51 +00:00
MipsSEFrameLowering.h [Mips] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-02-01 01:22:51 +00:00
MipsSEISelDAGToDAG.cpp [mips][msa] Fix generation of bm(n)zi and bins[lr]i instructions 2017-04-07 13:31:36 +00:00
MipsSEISelDAGToDAG.h [LLC][MIPS] Fix crash after enabling LLVM_ENABLE_EXPENSIVE_CHECKS 2017-01-04 09:34:37 +00:00
MipsSEISelLowering.cpp [mips][msa] Mask vectors holding shift amounts 2017-04-20 13:26:46 +00:00
MipsSEISelLowering.h [mips][msa] Implement f16 support 2016-11-18 16:17:44 +00:00
MipsSEInstrInfo.cpp [mips] Fix return lowering 2017-03-09 11:19:48 +00:00
MipsSEInstrInfo.h Revert "[mips] Fix c.<cc>.<fmt> instruction definition." 2016-09-09 11:06:01 +00:00
MipsSERegisterInfo.cpp MachineFunction: Return reference for getFrameInfo(); NFC 2016-07-28 18:40:00 +00:00
MipsSERegisterInfo.h
MipsSchedule.td Recommit: "[mips] Add rsqrt, recip for MIPS" 2016-10-05 16:11:01 +00:00
MipsScheduleGeneric.td Recommit: "[mips] Add rsqrt, recip for MIPS" 2016-10-05 16:11:01 +00:00
MipsScheduleP5600.td Recommit: "[mips] Add rsqrt, recip for MIPS" 2016-10-05 16:11:01 +00:00
MipsSubtarget.cpp [mips] Recommit: "N64 static relocation model support" 2017-01-27 11:36:52 +00:00
MipsSubtarget.h [LLVM][XRAY][MIPS] Support xray on mips/mipsel/mips64/mips64el 2017-02-15 10:48:11 +00:00
MipsTargetMachine.cpp [mips] Revert fixes for PR32020. 2017-03-09 14:03:26 +00:00
MipsTargetMachine.h [Mips] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC). 2017-02-01 01:22:51 +00:00
MipsTargetObjectFile.cpp [mips] Fix debug information for __thread variable 2017-01-20 17:53:30 +00:00
MipsTargetObjectFile.h [mips] Fix debug information for __thread variable 2017-01-20 17:53:30 +00:00
MipsTargetStreamer.h