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:
parent
177d202096
commit
5c104576fe
@ -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;
|
||||
|
||||
|
25
test/CodeGen/MSP430/cmp-return-type.ll
Normal file
25
test/CodeGen/MSP430/cmp-return-type.ll
Normal 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
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user