[PATCH] D43291: [ARM] f16 vcmp fixes
Sjoerd Meijer via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 14 07:35:22 PST 2018
SjoerdMeijer created this revision.
SjoerdMeijer added reviewers: samparker, olista01.
Herald added subscribers: kristof.beyls, javed.absar.
This adds a VCMPEZH match rule and fixes the f16 VCMP test cases.
https://reviews.llvm.org/D43291
Files:
lib/Target/ARM/ARMInstrVFP.td
test/CodeGen/ARM/fp16-instructions.ll
Index: test/CodeGen/ARM/fp16-instructions.ll
===================================================================
--- test/CodeGen/ARM/fp16-instructions.ll
+++ test/CodeGen/ARM/fp16-instructions.ll
@@ -104,43 +104,47 @@
%2 = bitcast float %G.coerce to i32
%tmp1.0.extract.trunc = trunc i32 %2 to i16
%3 = bitcast i16 %tmp1.0.extract.trunc to half
- %cmp = fcmp ogt half %1, %3
+ %cmp = fcmp une half %1, %3
ret i1 %cmp
; CHECK-LABEL: VCMP:
-; CHECK-SOFT: bl __aeabi_fcmpgt
+; CHECK-SOFT: bl __aeabi_fcmpeq
; CHECK-SOFTFP-VFP3: bl __aeabi_h2f
; CHECK-SOFTFP-VFP3: bl __aeabi_h2f
-; CHECK-SOFTFP-VFP3: vcmpe.f32 s{{.}}, s{{.}}
+; CHECK-SOFTFP-VFP3: vcmp.f32 s{{.}}, s{{.}}
; CHECK-SOFTFP-FP16: vcvtb.f32.f16 s{{.}}, s{{.}}
; CHECK-SOFTFP-FP16: vcvtb.f32.f16 s{{.}}, s{{.}}
-; CHECK-SOFTFP-FP16: vcmpe.f32 s{{.}}, s{{.}}
+; CHECK-SOFTFP-FP16: vcmp.f32 s{{.}}, s{{.}}
; CHECK-SOFTFP-FULLFP16: vmov.f16 [[S2:s[0-9]]], r0
; CHECK-SOFTFP-FULLFP16: vmov.f16 [[S0:s[0-9]]], r1
-; CHECK-SOFTFP-FULLFP16: vcmpe.f16 [[S2]], [[S0]]
+; CHECK-SOFTFP-FULLFP16: vcmp.f16 [[S2]], [[S0]]
; CHECK-SOFTFP-FULLFP16-NOT: vmov.f16 s{{.}}, r0
; CHECK-SOFTFP-FULLFP16-NOT: vmov.f16 s{{.}}, r1
-; CHECK-HARDFP-FULLFP16: vcmpe.f16 s0, s1
+; CHECK-HARDFP-FULLFP16: vcmp.f16 s0, s1
}
; 4. VCMPE
+define i32 @VCMPE_IMM(float %F.coerce) {
+entry:
+ %0 = bitcast float %F.coerce to i32
+ %tmp.0.extract.trunc = trunc i32 %0 to i16
+ %1 = bitcast i16 %tmp.0.extract.trunc to half
+ %tmp = fcmp olt half %1, 0.000000e+00
+ %tmp1 = zext i1 %tmp to i32
+ ret i32 %tmp1
-; FIXME: enable when constant pool is fixed
-;
-;define i32 @VCMPE_IMM(float %F.coerce) {
-;entry:
-; %0 = bitcast float %F.coerce to i32
-; %tmp.0.extract.trunc = trunc i32 %0 to i16
-; %1 = bitcast i16 %tmp.0.extract.trunc to half
-; %tmp = fcmp olt half %1, 1.000000e+00
-; %tmp1 = zext i1 %tmp to i32
-; ret i32 %tmp1
-;}
+; CHECK-LABEL: VCMPE_IMM:
+
+; CHECK-SOFT: bl __aeabi_fcmplt
+; CHECK-SOFTFP-FP16: vcmpe.f32 s0, #0
+; CHECK-SOFTFP-FULLFP16: vcmpe.f16 s0, #0
+; CHECK-HARDFP-FULLFP16: vcmpe.f16 s0, #0
+}
define i32 @VCMPE(float %F.coerce, float %G.coerce) {
entry:
@@ -155,6 +159,11 @@
ret i32 %tmp1
; CHECK-LABEL: VCMPE:
+
+; CHECK-SOFT: bl __aeabi_fcmplt
+; CHECK-SOFTFP-FP16: vcmpe.f32 s{{.}}, s{{.}}
+; CHECK-SOFTFP-FULLFP16: vcmpe.f16 s{{.}}, s{{.}}
+; CHECK-HARDFP-FULLFP16: vcmpe.f16 s{{.}}, s{{.}}
}
; 5. VCVT (between floating-point and fixed-point)
Index: lib/Target/ARM/ARMInstrVFP.td
===================================================================
--- lib/Target/ARM/ARMInstrVFP.td
+++ lib/Target/ARM/ARMInstrVFP.td
@@ -594,9 +594,9 @@
}
def VCMPEZH : AHuI<0b11101, 0b11, 0b0101, 0b11, 0,
- (outs), (ins SPR:$Sd),
+ (outs), (ins HPR:$Sd),
IIC_fpCMP16, "vcmpe", ".f16\t$Sd, #0",
- []> {
+ [(arm_cmpfp0 HPR:$Sd, (i32 1))]> {
let Inst{3-0} = 0b0000;
let Inst{5} = 0;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D43291.134227.patch
Type: text/x-patch
Size: 3159 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180214/f949664c/attachment.bin>
More information about the llvm-commits
mailing list