mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-10-06 14:57:41 +00:00
fe6bd52bf2
Summary: Correct the match patterns and the lowerings that made the CodeGen tests pass despite the mistakes. The original testcase that discovered the problem was SingleSource/UnitTests/SignlessType/factor.c in test-suite. During review, we also found that some of the existing CodeGen tests were incorrect and fixed them: * bitwise.ll: In bsel_v16i8 the IfSet/IfClear were reversed because bsel and bmnz have different operand orders and the test didn't correctly account for this. bmnz goes 'IfClear, IfSet, CondMask', while bsel goes 'CondMask, IfClear, IfSet'. * vec.ll: In the cases where a bsel is emitted as a bmnz (they are the same operation with a different input tied to the result) the operands were in the wrong order. * compare.ll and compare_float.ll: The bsel operand order was correct for a greater-than comparison, but a greater-than comparison instruction doesn't exist. Lowering this operation inverts the condition so the IfSet/IfClear need to be swapped to match. The differences between BSEL, BMNZ, and BMZ and how they map to/from vselect are rather confusing. I've therefore added a note to MSA.txt to explain this in a single place in addition to the comments that explain each case. Reviewers: matheusalmeida, jacksprat Reviewed By: matheusalmeida Differential Revision: http://llvm-reviews.chandlerc.com/D3028 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@203657 91177308-0d34-0410-b5e6-96231b3b80d8 |
||
---|---|---|
.. | ||
AsmParser | ||
Disassembler | ||
InstPrinter | ||
MCTargetDesc | ||
TargetInfo | ||
CMakeLists.txt | ||
LLVMBuild.txt | ||
Makefile | ||
MicroMipsInstrFormats.td | ||
MicroMipsInstrFPU.td | ||
MicroMipsInstrInfo.td | ||
Mips16FrameLowering.cpp | ||
Mips16FrameLowering.h | ||
Mips16HardFloat.cpp | ||
Mips16HardFloat.h | ||
Mips16HardFloatInfo.cpp | ||
Mips16HardFloatInfo.h | ||
Mips16InstrFormats.td | ||
Mips16InstrInfo.cpp | ||
Mips16InstrInfo.h | ||
Mips16InstrInfo.td | ||
Mips16ISelDAGToDAG.cpp | ||
Mips16ISelDAGToDAG.h | ||
Mips16ISelLowering.cpp | ||
Mips16ISelLowering.h | ||
Mips16RegisterInfo.cpp | ||
Mips16RegisterInfo.h | ||
Mips64InstrInfo.td | ||
Mips.h | ||
Mips.td | ||
MipsAnalyzeImmediate.cpp | ||
MipsAnalyzeImmediate.h | ||
MipsAsmPrinter.cpp | ||
MipsAsmPrinter.h | ||
MipsCallingConv.td | ||
MipsCodeEmitter.cpp | ||
MipsCondMov.td | ||
MipsConstantIslandPass.cpp | ||
MipsDelaySlotFiller.cpp | ||
MipsDSPInstrFormats.td | ||
MipsDSPInstrInfo.td | ||
MipsFrameLowering.cpp | ||
MipsFrameLowering.h | ||
MipsInstrFormats.td | ||
MipsInstrFPU.td | ||
MipsInstrInfo.cpp | ||
MipsInstrInfo.h | ||
MipsInstrInfo.td | ||
MipsISelDAGToDAG.cpp | ||
MipsISelDAGToDAG.h | ||
MipsISelLowering.cpp | ||
MipsISelLowering.h | ||
MipsJITInfo.cpp | ||
MipsJITInfo.h | ||
MipsLongBranch.cpp | ||
MipsMachineFunction.cpp | ||
MipsMachineFunction.h | ||
MipsMCInstLower.cpp | ||
MipsMCInstLower.h | ||
MipsModuleISelDAGToDAG.cpp | ||
MipsModuleISelDAGToDAG.h | ||
MipsMSAInstrFormats.td | ||
MipsMSAInstrInfo.td | ||
MipsOptimizePICCall.cpp | ||
MipsOs16.cpp | ||
MipsOs16.h | ||
MipsRegisterInfo.cpp | ||
MipsRegisterInfo.h | ||
MipsRegisterInfo.td | ||
MipsRelocations.h | ||
MipsSchedule.td | ||
MipsSEFrameLowering.cpp | ||
MipsSEFrameLowering.h | ||
MipsSEInstrInfo.cpp | ||
MipsSEInstrInfo.h | ||
MipsSEISelDAGToDAG.cpp | ||
MipsSEISelDAGToDAG.h | ||
MipsSEISelLowering.cpp | ||
MipsSEISelLowering.h | ||
MipsSelectionDAGInfo.cpp | ||
MipsSelectionDAGInfo.h | ||
MipsSERegisterInfo.cpp | ||
MipsSERegisterInfo.h | ||
MipsSubtarget.cpp | ||
MipsSubtarget.h | ||
MipsTargetMachine.cpp | ||
MipsTargetMachine.h | ||
MipsTargetObjectFile.cpp | ||
MipsTargetObjectFile.h | ||
MipsTargetStreamer.h | ||
MSA.txt |