1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 12:41:49 +01:00

[MSP430] Declare comparison LibCalls as returning i16 instead of i32

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
This commit is contained in:
Anatoly Trosinenko 2020-06-30 11:04:17 +03:00 committed by Anton Korobeynikov
parent 177d202096
commit 5c104576fe
2 changed files with 29 additions and 0 deletions

View File

@ -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;

View File

@ -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
}