1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 10:42:39 +01:00
llvm-mirror/lib/Target/AVR
Ayke van Laethem 283f599fca [AVR] Fix miscompilation of zext + add
Code like the following:

    define i32 @foo(i32 %a, i1 zeroext %b) addrspace(1) {
    entry:
      %conv = zext i1 %b to i32
      %add = add nsw i32 %conv, %a
      ret i32 %add
    }

Would compile to the following (incorrect) code:

    foo:
        mov     r18, r20
        clr     r19
        add     r22, r18
        adc     r23, r19
        sbci    r24, 0
        sbci    r25, 0
        ret

Those sbci instructions are clearly wrong, they should have been adc
instructions.

This commit improves codegen to use adc instead:

    foo:
        mov     r18, r20
        clr     r19
        ldi     r20, 0
        ldi     r21, 0
        add     r22, r18
        adc     r23, r19
        adc     r24, r20
        adc     r25, r21
        ret

This code is not optimal (it could be just 5 instructions instead of the
current 9) but at least it doesn't miscompile.

Differential Revision: https://reviews.llvm.org/D78439
2020-06-18 16:51:37 +02:00
..
AsmParser
Disassembler [AVR] Implement disassembly of 32-bit instructions 2020-06-18 11:26:58 +02:00
MCTargetDesc
TargetInfo
AVR.h
AVR.td
AVRAsmPrinter.cpp
AVRCallingConv.td
AVRDevices.td
AVRExpandPseudoInsts.cpp
AVRFrameLowering.cpp [AVR] Remove faulty stack pushing behavior 2020-06-16 13:53:32 +02:00
AVRFrameLowering.h
AVRInstrFormats.td [AVR] Implement disassembly support for I/O instructions 2020-06-10 20:55:47 +02:00
AVRInstrInfo.cpp
AVRInstrInfo.h
AVRInstrInfo.td [AVR] Fix miscompilation of zext + add 2020-06-18 16:51:37 +02:00
AVRISelDAGToDAG.cpp
AVRISelLowering.cpp
AVRISelLowering.h
AVRMachineFunctionInfo.h
AVRMCInstLower.cpp
AVRMCInstLower.h
AVRRegisterInfo.cpp
AVRRegisterInfo.h
AVRRegisterInfo.td
AVRRelaxMemOperations.cpp
AVRSelectionDAGInfo.h
AVRSubtarget.cpp
AVRSubtarget.h
AVRTargetMachine.cpp
AVRTargetMachine.h
AVRTargetObjectFile.cpp
AVRTargetObjectFile.h
CMakeLists.txt
LLVMBuild.txt
README.md
TODO.md

AVR backend

This experimental backend is for the 8-bit Atmel AVR microcontroller.