[PATCH] D44518: [ARM] FP16 codegen support for VSEL
Sjoerd Meijer via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 16 01:09:04 PDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL327695: [ARM] FP16 codegen support for VSEL (authored by SjoerdMeijer, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D44518?vs=138548&id=138668#toc
Repository:
rL LLVM
https://reviews.llvm.org/D44518
Files:
llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp
llvm/trunk/lib/Target/ARM/ARMInstrVFP.td
llvm/trunk/test/CodeGen/ARM/fp16-instructions.ll
Index: llvm/trunk/test/CodeGen/ARM/fp16-instructions.ll
===================================================================
--- llvm/trunk/test/CodeGen/ARM/fp16-instructions.ll
+++ llvm/trunk/test/CodeGen/ARM/fp16-instructions.ll
@@ -687,18 +687,56 @@
; CHECK-HARDFP-FULLFP16: vnmul.f16 s0, s0, s1
}
+; TODO:
; 28. VRINTA
; 29. VRINTM
; 30. VRINTN
; 31. VRINTP
; 32. VRINTR
; 33. VRINTX
; 34. VRINTZ
+
; 35. VSELEQ
+define half @select_cc1() {
+ %1 = fcmp nsz oeq half undef, 0xH0001
+ %2 = select i1 %1, half 0xHC000, half 0xH0002
+ ret half %2
+
+; CHECK-LABEL: select_cc1:
+; CHECK-HARDFP-FULLFP16: vseleq.f16 s0, s{{.}}, s{{.}}
+}
+
; 36. VSELGE
+define half @select_cc2() {
+ %1 = fcmp nsz oge half undef, 0xH0001
+ %2 = select i1 %1, half 0xHC000, half 0xH0002
+ ret half %2
+
+; CHECK-LABEL: select_cc2:
+; CHECK-HARDFP-FULLFP16: vselge.f16 s0, s{{.}}, s{{.}}
+}
+
; 37. VSELGT
+define half @select_cc3() {
+ %1 = fcmp nsz ogt half undef, 0xH0001
+ %2 = select i1 %1, half 0xHC000, half 0xH0002
+ ret half %2
+
+; CHECK-LABEL: select_cc3:
+; CHECK-HARDFP-FULLFP16: vselgt.f16 s0, s{{.}}, s{{.}}
+}
+
; 38. VSELVS
-; 39. VSQRT
+define half @select_cc4() {
+ %1 = fcmp nsz ueq half undef, 0xH0001
+ %2 = select i1 %1, half 0xHC000, half 0xH0002
+ ret half %2
+
+; CHECK-LABEL: select_cc4:
+; CHECK-HARDFP-FULLFP16: vselvs.f16 s0, s{{.}}, s{{.}}
+}
+
+; 39. VSQRT - TODO
; 40. VSUB
define float @Sub(float %a.coerce, float %b.coerce) {
Index: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp
===================================================================
--- llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp
+++ llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp
@@ -1048,6 +1048,7 @@
setOperationAction(ISD::SELECT, MVT::i32, Custom);
setOperationAction(ISD::SELECT, MVT::f32, Custom);
setOperationAction(ISD::SELECT, MVT::f64, Custom);
+ setOperationAction(ISD::SELECT_CC, MVT::f16, Custom);
setOperationAction(ISD::SELECT_CC, MVT::i32, Custom);
setOperationAction(ISD::SELECT_CC, MVT::f32, Custom);
setOperationAction(ISD::SELECT_CC, MVT::f64, Custom);
Index: llvm/trunk/lib/Target/ARM/ARMInstrVFP.td
===================================================================
--- llvm/trunk/lib/Target/ARM/ARMInstrVFP.td
+++ llvm/trunk/lib/Target/ARM/ARMInstrVFP.td
@@ -451,9 +451,9 @@
let DecoderNamespace = "VFPV8", PostEncoderMethod = "",
Uses = [CPSR], AddedComplexity = 4 in {
def H : AHbInp<0b11100, opc, 0,
- (outs SPR:$Sd), (ins SPR:$Sn, SPR:$Sm),
+ (outs HPR:$Sd), (ins HPR:$Sn, HPR:$Sm),
NoItinerary, !strconcat("vsel", op, ".f16\t$Sd, $Sn, $Sm"),
- []>,
+ [(set HPR:$Sd, (ARMcmov HPR:$Sm, HPR:$Sn, CC))]>,
Requires<[HasFullFP16]>;
def S : ASbInp<0b11100, opc, 0,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D44518.138668.patch
Type: text/x-patch
Size: 2964 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180316/adc28859/attachment.bin>
More information about the llvm-commits
mailing list