[llvm] 19e7571 - [MSP430] Declare comparison LibCalls as returning i16 instead of i32

Anton Korobeynikov via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 30 01:04:45 PDT 2020


Author: Anatoly Trosinenko
Date: 2020-06-30T11:04:22+03:00
New Revision: 19e75717eff2c22e6643addcc44caa8dc2f0125f

URL: https://github.com/llvm/llvm-project/commit/19e75717eff2c22e6643addcc44caa8dc2f0125f
DIFF: https://github.com/llvm/llvm-project/commit/19e75717eff2c22e6643addcc44caa8dc2f0125f.diff

LOG: [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

Added: 
    llvm/test/CodeGen/MSP430/cmp-return-type.ll

Modified: 
    llvm/lib/Target/MSP430/MSP430ISelLowering.h

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/MSP430/MSP430ISelLowering.h b/llvm/lib/Target/MSP430/MSP430ISelLowering.h
index 650f9a704062..f23042a369fd 100644
--- a/llvm/lib/Target/MSP430/MSP430ISelLowering.h
+++ b/llvm/lib/Target/MSP430/MSP430ISelLowering.h
@@ -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;
 

diff  --git a/llvm/test/CodeGen/MSP430/cmp-return-type.ll b/llvm/test/CodeGen/MSP430/cmp-return-type.ll
new file mode 100644
index 000000000000..6c3f31d509cc
--- /dev/null
+++ b/llvm/test/CodeGen/MSP430/cmp-return-type.ll
@@ -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
+}


        


More information about the llvm-commits mailing list