[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