Skip to content

Commit

Permalink
[MSP430] Declare comparison LibCalls as returning i16 instead of i32
Browse files Browse the repository at this point in the history
For TI's distribution of msp430-gcc
```
msp430-elf-gcc -S -o- -Os -x c - <<< "int f(float a, float b) { return a != b; }"
```
does not mention `R13` at all. `__libgcc_cmp_return__` machine mode is 2 byte on MSP430, as well.

Differential Revision: https://reviews.llvm.org/D82635
  • Loading branch information
atrosinenko authored and asl committed Jun 30, 2020
1 parent 4f5133a commit 19e7571
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 0 deletions.
4 changes: 4 additions & 0 deletions llvm/lib/Target/MSP430/MSP430ISelLowering.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,10 @@ namespace llvm {
return MVT::i8;
}

MVT::SimpleValueType getCmpLibcallReturnType() const override {
return MVT::i16;
}

/// LowerOperation - Provide custom lowering hooks for some operations.
SDValue LowerOperation(SDValue Op, SelectionDAG &DAG) const override;

Expand Down
25 changes: 25 additions & 0 deletions llvm/test/CodeGen/MSP430/cmp-return-type.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
; RUN: llc < %s | FileCheck %s

target datalayout = "e-m:e-p:16:16-i32:16-i64:16-f32:16-f64:16-a:8-n8:16-S16"
target triple = "msp430"

define i16 @f(float %a, float %b) optsize {
%cmp = fcmp une float %a, %b
%conv = zext i1 %cmp to i16
; CHECK-LABEL: call #__mspabi_cmpf
; CHECK-NOT: r13
; CHECK-LABEL: mov r2

; This is quite fragile attempt to detect the return type:
; Correct:
; call #__mspabi_cmpf
; tst r12
; mov r2, r13
; Incorrect:
; call #__mspabi_cmpf
; bis r12, r13 <-- checking (R12:R13)
; tst r13
; mov r2, r13

ret i16 %conv
}

0 comments on commit 19e7571

Please sign in to comment.