[llvm] Revert "[AArch64][GlobalISel] Add G_FPEXT(G_FCONSTANT) folding" (PR #162805)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 10 01:47:47 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-globalisel
Author: Ryan Cowan (HolyMolyCowMan)
<details>
<summary>Changes</summary>
Reverts llvm/llvm-project#<!-- -->160902
---
Patch is 291.91 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/162805.diff
18 Files Affected:
- (modified) llvm/include/llvm/Target/GlobalISel/Combine.td (-2)
- (modified) llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp (-1)
- (modified) llvm/lib/Target/AArch64/AArch64Combine.td (+1-1)
- (modified) llvm/test/CodeGen/AArch64/arm64-indexed-memory.ll (+6-4)
- (modified) llvm/test/CodeGen/AArch64/f16-instructions.ll (+10-8)
- (modified) llvm/test/CodeGen/AArch64/fcvt-fixed.ll (+385-176)
- (modified) llvm/test/CodeGen/AArch64/frem-power2.ll (+2-1)
- (modified) llvm/test/CodeGen/AArch64/vecreduce-fadd-strict.ll (+41-11)
- (modified) llvm/test/CodeGen/AArch64/vecreduce-fmul-strict.ll (+24-6)
- (modified) llvm/test/CodeGen/AMDGPU/GlobalISel/fdiv.f16.ll (+1716-1501)
- (modified) llvm/test/CodeGen/AMDGPU/GlobalISel/frem.ll (+10-7)
- (modified) llvm/test/CodeGen/AMDGPU/fmed3.ll (+28-18)
- (modified) llvm/test/CodeGen/AMDGPU/llvm.exp.ll (+9-6)
- (modified) llvm/test/CodeGen/AMDGPU/llvm.exp10.ll (+9-6)
- (modified) llvm/test/CodeGen/AMDGPU/mad-mix-hi.ll (+9-5)
- (modified) llvm/test/CodeGen/AMDGPU/mad-mix-lo.ll (+44-32)
- (modified) llvm/test/CodeGen/AMDGPU/maximumnum.ll (+2-1)
- (modified) llvm/test/CodeGen/AMDGPU/minimumnum.ll (+2-1)
``````````diff
diff --git a/llvm/include/llvm/Target/GlobalISel/Combine.td b/llvm/include/llvm/Target/GlobalISel/Combine.td
index 3d21f522e97ce..e2b7a5ead2cd3 100644
--- a/llvm/include/llvm/Target/GlobalISel/Combine.td
+++ b/llvm/include/llvm/Target/GlobalISel/Combine.td
@@ -695,7 +695,6 @@ def constant_fold_fabs : constant_fold_unary_fp_op_rule<G_FABS>;
def constant_fold_fsqrt : constant_fold_unary_fp_op_rule<G_FSQRT>;
def constant_fold_flog2 : constant_fold_unary_fp_op_rule<G_FLOG2>;
def constant_fold_fptrunc : constant_fold_unary_fp_op_rule<G_FPTRUNC>;
-def constant_fold_fpext : constant_fold_unary_fp_op_rule<G_FPEXT>;
// Fold constant zero int to fp conversions.
class itof_const_zero_fold_rule<Instruction opcode> : GICombineRule <
@@ -714,7 +713,6 @@ def constant_fold_fp_ops : GICombineGroup<[
constant_fold_fsqrt,
constant_fold_flog2,
constant_fold_fptrunc,
- constant_fold_fpext,
itof_const_zero_fold_si,
itof_const_zero_fold_ui
]>;
diff --git a/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp
index b425b952bfc1d..906d62a33d51d 100644
--- a/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp
+++ b/llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp
@@ -1728,7 +1728,6 @@ static APFloat constantFoldFpUnary(const MachineInstr &MI,
Result.clearSign();
return Result;
}
- case TargetOpcode::G_FPEXT:
case TargetOpcode::G_FPTRUNC: {
bool Unused;
LLT DstTy = MRI.getType(MI.getOperand(0).getReg());
diff --git a/llvm/lib/Target/AArch64/AArch64Combine.td b/llvm/lib/Target/AArch64/AArch64Combine.td
index ecaeff77fcb4b..639ddcba28468 100644
--- a/llvm/lib/Target/AArch64/AArch64Combine.td
+++ b/llvm/lib/Target/AArch64/AArch64Combine.td
@@ -350,7 +350,7 @@ def AArch64PostLegalizerLowering
// Post-legalization combines which are primarily optimizations.
def AArch64PostLegalizerCombiner
: GICombiner<"AArch64PostLegalizerCombinerImpl",
- [copy_prop, cast_of_cast_combines, constant_fold_fp_ops,
+ [copy_prop, cast_of_cast_combines,
buildvector_of_truncate, integer_of_truncate,
mutate_anyext_to_zext, combines_for_extload,
combine_indexed_load_store, sext_trunc_sextload,
diff --git a/llvm/test/CodeGen/AArch64/arm64-indexed-memory.ll b/llvm/test/CodeGen/AArch64/arm64-indexed-memory.ll
index e8e563135acc5..322a96aca5db2 100644
--- a/llvm/test/CodeGen/AArch64/arm64-indexed-memory.ll
+++ b/llvm/test/CodeGen/AArch64/arm64-indexed-memory.ll
@@ -739,12 +739,14 @@ define ptr @postidx32_shalf(ptr %src, ptr %out, half %a) {
;
; GISEL-LABEL: postidx32_shalf:
; GISEL: ; %bb.0:
-; GISEL-NEXT: ldr h1, [x0], #4
+; GISEL-NEXT: movi d1, #0000000000000000
+; GISEL-NEXT: ldr h2, [x0], #4
; GISEL-NEXT: ; kill: def $h0 killed $h0 def $s0
; GISEL-NEXT: fmov w9, s0
-; GISEL-NEXT: fcvt s2, h1
-; GISEL-NEXT: fmov w8, s1
-; GISEL-NEXT: fcmp s2, #0.0
+; GISEL-NEXT: fcvt s3, h2
+; GISEL-NEXT: fmov w8, s2
+; GISEL-NEXT: fcvt s1, h1
+; GISEL-NEXT: fcmp s3, s1
; GISEL-NEXT: csel w8, w8, w9, mi
; GISEL-NEXT: strh w8, [x1]
; GISEL-NEXT: ret
diff --git a/llvm/test/CodeGen/AArch64/f16-instructions.ll b/llvm/test/CodeGen/AArch64/f16-instructions.ll
index 085170c7ba381..b234ef7a5ff8b 100644
--- a/llvm/test/CodeGen/AArch64/f16-instructions.ll
+++ b/llvm/test/CodeGen/AArch64/f16-instructions.ll
@@ -782,16 +782,18 @@ define void @test_fccmp(half %in, ptr %out) {
;
; CHECK-CVT-GI-LABEL: test_fccmp:
; CHECK-CVT-GI: // %bb.0:
-; CHECK-CVT-GI-NEXT: // kill: def $h0 killed $h0 def $s0
-; CHECK-CVT-GI-NEXT: fcvt s1, h0
-; CHECK-CVT-GI-NEXT: fmov s2, #5.00000000
; CHECK-CVT-GI-NEXT: adrp x8, .LCPI29_0
-; CHECK-CVT-GI-NEXT: fmov s3, #8.00000000
-; CHECK-CVT-GI-NEXT: fcmp s1, s2
-; CHECK-CVT-GI-NEXT: ldr h2, [x8, :lo12:.LCPI29_0]
+; CHECK-CVT-GI-NEXT: // kill: def $h0 killed $h0 def $s0
+; CHECK-CVT-GI-NEXT: fcvt s2, h0
+; CHECK-CVT-GI-NEXT: ldr h1, [x8, :lo12:.LCPI29_0]
+; CHECK-CVT-GI-NEXT: adrp x8, .LCPI29_1
+; CHECK-CVT-GI-NEXT: ldr h4, [x8, :lo12:.LCPI29_1]
; CHECK-CVT-GI-NEXT: fmov w8, s0
-; CHECK-CVT-GI-NEXT: fmov w9, s2
-; CHECK-CVT-GI-NEXT: fccmp s1, s3, #4, mi
+; CHECK-CVT-GI-NEXT: fcvt s3, h1
+; CHECK-CVT-GI-NEXT: fmov w9, s1
+; CHECK-CVT-GI-NEXT: fcvt s4, h4
+; CHECK-CVT-GI-NEXT: fcmp s2, s3
+; CHECK-CVT-GI-NEXT: fccmp s2, s4, #4, mi
; CHECK-CVT-GI-NEXT: csel w8, w8, w9, gt
; CHECK-CVT-GI-NEXT: strh w8, [x0]
; CHECK-CVT-GI-NEXT: ret
diff --git a/llvm/test/CodeGen/AArch64/fcvt-fixed.ll b/llvm/test/CodeGen/AArch64/fcvt-fixed.ll
index 743d1604388de..7409bfb91454c 100644
--- a/llvm/test/CodeGen/AArch64/fcvt-fixed.ll
+++ b/llvm/test/CodeGen/AArch64/fcvt-fixed.ll
@@ -149,21 +149,33 @@ define i64 @fcvtzs_f64_i64_64(double %dbl) {
}
define i32 @fcvtzs_f16_i32_7(half %flt) {
-; CHECK-NO16-LABEL: fcvtzs_f16_i32_7:
-; CHECK-NO16: // %bb.0:
-; CHECK-NO16-NEXT: movi v1.2s, #67, lsl #24
-; CHECK-NO16-NEXT: fcvt s0, h0
-; CHECK-NO16-NEXT: fmul s0, s0, s1
-; CHECK-NO16-NEXT: fcvt h0, s0
-; CHECK-NO16-NEXT: fcvt s0, h0
-; CHECK-NO16-NEXT: fcvtzs w0, s0
-; CHECK-NO16-NEXT: ret
+; CHECK-SD-NO16-LABEL: fcvtzs_f16_i32_7:
+; CHECK-SD-NO16: // %bb.0:
+; CHECK-SD-NO16-NEXT: movi v1.2s, #67, lsl #24
+; CHECK-SD-NO16-NEXT: fcvt s0, h0
+; CHECK-SD-NO16-NEXT: fmul s0, s0, s1
+; CHECK-SD-NO16-NEXT: fcvt h0, s0
+; CHECK-SD-NO16-NEXT: fcvt s0, h0
+; CHECK-SD-NO16-NEXT: fcvtzs w0, s0
+; CHECK-SD-NO16-NEXT: ret
;
; CHECK-SD-FP16-LABEL: fcvtzs_f16_i32_7:
; CHECK-SD-FP16: // %bb.0:
; CHECK-SD-FP16-NEXT: fcvtzs w0, h0, #7
; CHECK-SD-FP16-NEXT: ret
;
+; CHECK-GI-NO16-LABEL: fcvtzs_f16_i32_7:
+; CHECK-GI-NO16: // %bb.0:
+; CHECK-GI-NO16-NEXT: adrp x8, .LCPI8_0
+; CHECK-GI-NO16-NEXT: fcvt s0, h0
+; CHECK-GI-NO16-NEXT: ldr h1, [x8, :lo12:.LCPI8_0]
+; CHECK-GI-NO16-NEXT: fcvt s1, h1
+; CHECK-GI-NO16-NEXT: fmul s0, s0, s1
+; CHECK-GI-NO16-NEXT: fcvt h0, s0
+; CHECK-GI-NO16-NEXT: fcvt s0, h0
+; CHECK-GI-NO16-NEXT: fcvtzs w0, s0
+; CHECK-GI-NO16-NEXT: ret
+;
; CHECK-GI-FP16-LABEL: fcvtzs_f16_i32_7:
; CHECK-GI-FP16: // %bb.0:
; CHECK-GI-FP16-NEXT: adrp x8, .LCPI8_0
@@ -177,21 +189,33 @@ define i32 @fcvtzs_f16_i32_7(half %flt) {
}
define i32 @fcvtzs_f16_i32_15(half %flt) {
-; CHECK-NO16-LABEL: fcvtzs_f16_i32_15:
-; CHECK-NO16: // %bb.0:
-; CHECK-NO16-NEXT: movi v1.2s, #71, lsl #24
-; CHECK-NO16-NEXT: fcvt s0, h0
-; CHECK-NO16-NEXT: fmul s0, s0, s1
-; CHECK-NO16-NEXT: fcvt h0, s0
-; CHECK-NO16-NEXT: fcvt s0, h0
-; CHECK-NO16-NEXT: fcvtzs w0, s0
-; CHECK-NO16-NEXT: ret
+; CHECK-SD-NO16-LABEL: fcvtzs_f16_i32_15:
+; CHECK-SD-NO16: // %bb.0:
+; CHECK-SD-NO16-NEXT: movi v1.2s, #71, lsl #24
+; CHECK-SD-NO16-NEXT: fcvt s0, h0
+; CHECK-SD-NO16-NEXT: fmul s0, s0, s1
+; CHECK-SD-NO16-NEXT: fcvt h0, s0
+; CHECK-SD-NO16-NEXT: fcvt s0, h0
+; CHECK-SD-NO16-NEXT: fcvtzs w0, s0
+; CHECK-SD-NO16-NEXT: ret
;
; CHECK-SD-FP16-LABEL: fcvtzs_f16_i32_15:
; CHECK-SD-FP16: // %bb.0:
; CHECK-SD-FP16-NEXT: fcvtzs w0, h0, #15
; CHECK-SD-FP16-NEXT: ret
;
+; CHECK-GI-NO16-LABEL: fcvtzs_f16_i32_15:
+; CHECK-GI-NO16: // %bb.0:
+; CHECK-GI-NO16-NEXT: adrp x8, .LCPI9_0
+; CHECK-GI-NO16-NEXT: fcvt s0, h0
+; CHECK-GI-NO16-NEXT: ldr h1, [x8, :lo12:.LCPI9_0]
+; CHECK-GI-NO16-NEXT: fcvt s1, h1
+; CHECK-GI-NO16-NEXT: fmul s0, s0, s1
+; CHECK-GI-NO16-NEXT: fcvt h0, s0
+; CHECK-GI-NO16-NEXT: fcvt s0, h0
+; CHECK-GI-NO16-NEXT: fcvtzs w0, s0
+; CHECK-GI-NO16-NEXT: ret
+;
; CHECK-GI-FP16-LABEL: fcvtzs_f16_i32_15:
; CHECK-GI-FP16: // %bb.0:
; CHECK-GI-FP16-NEXT: adrp x8, .LCPI9_0
@@ -205,21 +229,33 @@ define i32 @fcvtzs_f16_i32_15(half %flt) {
}
define i64 @fcvtzs_f16_i64_7(half %flt) {
-; CHECK-NO16-LABEL: fcvtzs_f16_i64_7:
-; CHECK-NO16: // %bb.0:
-; CHECK-NO16-NEXT: movi v1.2s, #67, lsl #24
-; CHECK-NO16-NEXT: fcvt s0, h0
-; CHECK-NO16-NEXT: fmul s0, s0, s1
-; CHECK-NO16-NEXT: fcvt h0, s0
-; CHECK-NO16-NEXT: fcvt s0, h0
-; CHECK-NO16-NEXT: fcvtzs x0, s0
-; CHECK-NO16-NEXT: ret
+; CHECK-SD-NO16-LABEL: fcvtzs_f16_i64_7:
+; CHECK-SD-NO16: // %bb.0:
+; CHECK-SD-NO16-NEXT: movi v1.2s, #67, lsl #24
+; CHECK-SD-NO16-NEXT: fcvt s0, h0
+; CHECK-SD-NO16-NEXT: fmul s0, s0, s1
+; CHECK-SD-NO16-NEXT: fcvt h0, s0
+; CHECK-SD-NO16-NEXT: fcvt s0, h0
+; CHECK-SD-NO16-NEXT: fcvtzs x0, s0
+; CHECK-SD-NO16-NEXT: ret
;
; CHECK-SD-FP16-LABEL: fcvtzs_f16_i64_7:
; CHECK-SD-FP16: // %bb.0:
; CHECK-SD-FP16-NEXT: fcvtzs x0, h0, #7
; CHECK-SD-FP16-NEXT: ret
;
+; CHECK-GI-NO16-LABEL: fcvtzs_f16_i64_7:
+; CHECK-GI-NO16: // %bb.0:
+; CHECK-GI-NO16-NEXT: adrp x8, .LCPI10_0
+; CHECK-GI-NO16-NEXT: fcvt s0, h0
+; CHECK-GI-NO16-NEXT: ldr h1, [x8, :lo12:.LCPI10_0]
+; CHECK-GI-NO16-NEXT: fcvt s1, h1
+; CHECK-GI-NO16-NEXT: fmul s0, s0, s1
+; CHECK-GI-NO16-NEXT: fcvt h0, s0
+; CHECK-GI-NO16-NEXT: fcvt s0, h0
+; CHECK-GI-NO16-NEXT: fcvtzs x0, s0
+; CHECK-GI-NO16-NEXT: ret
+;
; CHECK-GI-FP16-LABEL: fcvtzs_f16_i64_7:
; CHECK-GI-FP16: // %bb.0:
; CHECK-GI-FP16-NEXT: adrp x8, .LCPI10_0
@@ -233,21 +269,33 @@ define i64 @fcvtzs_f16_i64_7(half %flt) {
}
define i64 @fcvtzs_f16_i64_15(half %flt) {
-; CHECK-NO16-LABEL: fcvtzs_f16_i64_15:
-; CHECK-NO16: // %bb.0:
-; CHECK-NO16-NEXT: movi v1.2s, #71, lsl #24
-; CHECK-NO16-NEXT: fcvt s0, h0
-; CHECK-NO16-NEXT: fmul s0, s0, s1
-; CHECK-NO16-NEXT: fcvt h0, s0
-; CHECK-NO16-NEXT: fcvt s0, h0
-; CHECK-NO16-NEXT: fcvtzs x0, s0
-; CHECK-NO16-NEXT: ret
+; CHECK-SD-NO16-LABEL: fcvtzs_f16_i64_15:
+; CHECK-SD-NO16: // %bb.0:
+; CHECK-SD-NO16-NEXT: movi v1.2s, #71, lsl #24
+; CHECK-SD-NO16-NEXT: fcvt s0, h0
+; CHECK-SD-NO16-NEXT: fmul s0, s0, s1
+; CHECK-SD-NO16-NEXT: fcvt h0, s0
+; CHECK-SD-NO16-NEXT: fcvt s0, h0
+; CHECK-SD-NO16-NEXT: fcvtzs x0, s0
+; CHECK-SD-NO16-NEXT: ret
;
; CHECK-SD-FP16-LABEL: fcvtzs_f16_i64_15:
; CHECK-SD-FP16: // %bb.0:
; CHECK-SD-FP16-NEXT: fcvtzs x0, h0, #15
; CHECK-SD-FP16-NEXT: ret
;
+; CHECK-GI-NO16-LABEL: fcvtzs_f16_i64_15:
+; CHECK-GI-NO16: // %bb.0:
+; CHECK-GI-NO16-NEXT: adrp x8, .LCPI11_0
+; CHECK-GI-NO16-NEXT: fcvt s0, h0
+; CHECK-GI-NO16-NEXT: ldr h1, [x8, :lo12:.LCPI11_0]
+; CHECK-GI-NO16-NEXT: fcvt s1, h1
+; CHECK-GI-NO16-NEXT: fmul s0, s0, s1
+; CHECK-GI-NO16-NEXT: fcvt h0, s0
+; CHECK-GI-NO16-NEXT: fcvt s0, h0
+; CHECK-GI-NO16-NEXT: fcvtzs x0, s0
+; CHECK-GI-NO16-NEXT: ret
+;
; CHECK-GI-FP16-LABEL: fcvtzs_f16_i64_15:
; CHECK-GI-FP16: // %bb.0:
; CHECK-GI-FP16-NEXT: adrp x8, .LCPI11_0
@@ -405,21 +453,33 @@ define i64 @fcvtzu_f64_i64_64(double %dbl) {
}
define i32 @fcvtzu_f16_i32_7(half %flt) {
-; CHECK-NO16-LABEL: fcvtzu_f16_i32_7:
-; CHECK-NO16: // %bb.0:
-; CHECK-NO16-NEXT: movi v1.2s, #67, lsl #24
-; CHECK-NO16-NEXT: fcvt s0, h0
-; CHECK-NO16-NEXT: fmul s0, s0, s1
-; CHECK-NO16-NEXT: fcvt h0, s0
-; CHECK-NO16-NEXT: fcvt s0, h0
-; CHECK-NO16-NEXT: fcvtzu w0, s0
-; CHECK-NO16-NEXT: ret
+; CHECK-SD-NO16-LABEL: fcvtzu_f16_i32_7:
+; CHECK-SD-NO16: // %bb.0:
+; CHECK-SD-NO16-NEXT: movi v1.2s, #67, lsl #24
+; CHECK-SD-NO16-NEXT: fcvt s0, h0
+; CHECK-SD-NO16-NEXT: fmul s0, s0, s1
+; CHECK-SD-NO16-NEXT: fcvt h0, s0
+; CHECK-SD-NO16-NEXT: fcvt s0, h0
+; CHECK-SD-NO16-NEXT: fcvtzu w0, s0
+; CHECK-SD-NO16-NEXT: ret
;
; CHECK-SD-FP16-LABEL: fcvtzu_f16_i32_7:
; CHECK-SD-FP16: // %bb.0:
; CHECK-SD-FP16-NEXT: fcvtzu w0, h0, #7
; CHECK-SD-FP16-NEXT: ret
;
+; CHECK-GI-NO16-LABEL: fcvtzu_f16_i32_7:
+; CHECK-GI-NO16: // %bb.0:
+; CHECK-GI-NO16-NEXT: adrp x8, .LCPI20_0
+; CHECK-GI-NO16-NEXT: fcvt s0, h0
+; CHECK-GI-NO16-NEXT: ldr h1, [x8, :lo12:.LCPI20_0]
+; CHECK-GI-NO16-NEXT: fcvt s1, h1
+; CHECK-GI-NO16-NEXT: fmul s0, s0, s1
+; CHECK-GI-NO16-NEXT: fcvt h0, s0
+; CHECK-GI-NO16-NEXT: fcvt s0, h0
+; CHECK-GI-NO16-NEXT: fcvtzu w0, s0
+; CHECK-GI-NO16-NEXT: ret
+;
; CHECK-GI-FP16-LABEL: fcvtzu_f16_i32_7:
; CHECK-GI-FP16: // %bb.0:
; CHECK-GI-FP16-NEXT: adrp x8, .LCPI20_0
@@ -433,21 +493,33 @@ define i32 @fcvtzu_f16_i32_7(half %flt) {
}
define i32 @fcvtzu_f16_i32_15(half %flt) {
-; CHECK-NO16-LABEL: fcvtzu_f16_i32_15:
-; CHECK-NO16: // %bb.0:
-; CHECK-NO16-NEXT: movi v1.2s, #71, lsl #24
-; CHECK-NO16-NEXT: fcvt s0, h0
-; CHECK-NO16-NEXT: fmul s0, s0, s1
-; CHECK-NO16-NEXT: fcvt h0, s0
-; CHECK-NO16-NEXT: fcvt s0, h0
-; CHECK-NO16-NEXT: fcvtzu w0, s0
-; CHECK-NO16-NEXT: ret
+; CHECK-SD-NO16-LABEL: fcvtzu_f16_i32_15:
+; CHECK-SD-NO16: // %bb.0:
+; CHECK-SD-NO16-NEXT: movi v1.2s, #71, lsl #24
+; CHECK-SD-NO16-NEXT: fcvt s0, h0
+; CHECK-SD-NO16-NEXT: fmul s0, s0, s1
+; CHECK-SD-NO16-NEXT: fcvt h0, s0
+; CHECK-SD-NO16-NEXT: fcvt s0, h0
+; CHECK-SD-NO16-NEXT: fcvtzu w0, s0
+; CHECK-SD-NO16-NEXT: ret
;
; CHECK-SD-FP16-LABEL: fcvtzu_f16_i32_15:
; CHECK-SD-FP16: // %bb.0:
; CHECK-SD-FP16-NEXT: fcvtzu w0, h0, #15
; CHECK-SD-FP16-NEXT: ret
;
+; CHECK-GI-NO16-LABEL: fcvtzu_f16_i32_15:
+; CHECK-GI-NO16: // %bb.0:
+; CHECK-GI-NO16-NEXT: adrp x8, .LCPI21_0
+; CHECK-GI-NO16-NEXT: fcvt s0, h0
+; CHECK-GI-NO16-NEXT: ldr h1, [x8, :lo12:.LCPI21_0]
+; CHECK-GI-NO16-NEXT: fcvt s1, h1
+; CHECK-GI-NO16-NEXT: fmul s0, s0, s1
+; CHECK-GI-NO16-NEXT: fcvt h0, s0
+; CHECK-GI-NO16-NEXT: fcvt s0, h0
+; CHECK-GI-NO16-NEXT: fcvtzu w0, s0
+; CHECK-GI-NO16-NEXT: ret
+;
; CHECK-GI-FP16-LABEL: fcvtzu_f16_i32_15:
; CHECK-GI-FP16: // %bb.0:
; CHECK-GI-FP16-NEXT: adrp x8, .LCPI21_0
@@ -461,21 +533,33 @@ define i32 @fcvtzu_f16_i32_15(half %flt) {
}
define i64 @fcvtzu_f16_i64_7(half %flt) {
-; CHECK-NO16-LABEL: fcvtzu_f16_i64_7:
-; CHECK-NO16: // %bb.0:
-; CHECK-NO16-NEXT: movi v1.2s, #67, lsl #24
-; CHECK-NO16-NEXT: fcvt s0, h0
-; CHECK-NO16-NEXT: fmul s0, s0, s1
-; CHECK-NO16-NEXT: fcvt h0, s0
-; CHECK-NO16-NEXT: fcvt s0, h0
-; CHECK-NO16-NEXT: fcvtzu x0, s0
-; CHECK-NO16-NEXT: ret
+; CHECK-SD-NO16-LABEL: fcvtzu_f16_i64_7:
+; CHECK-SD-NO16: // %bb.0:
+; CHECK-SD-NO16-NEXT: movi v1.2s, #67, lsl #24
+; CHECK-SD-NO16-NEXT: fcvt s0, h0
+; CHECK-SD-NO16-NEXT: fmul s0, s0, s1
+; CHECK-SD-NO16-NEXT: fcvt h0, s0
+; CHECK-SD-NO16-NEXT: fcvt s0, h0
+; CHECK-SD-NO16-NEXT: fcvtzu x0, s0
+; CHECK-SD-NO16-NEXT: ret
;
; CHECK-SD-FP16-LABEL: fcvtzu_f16_i64_7:
; CHECK-SD-FP16: // %bb.0:
; CHECK-SD-FP16-NEXT: fcvtzu x0, h0, #7
; CHECK-SD-FP16-NEXT: ret
;
+; CHECK-GI-NO16-LABEL: fcvtzu_f16_i64_7:
+; CHECK-GI-NO16: // %bb.0:
+; CHECK-GI-NO16-NEXT: adrp x8, .LCPI22_0
+; CHECK-GI-NO16-NEXT: fcvt s0, h0
+; CHECK-GI-NO16-NEXT: ldr h1, [x8, :lo12:.LCPI22_0]
+; CHECK-GI-NO16-NEXT: fcvt s1, h1
+; CHECK-GI-NO16-NEXT: fmul s0, s0, s1
+; CHECK-GI-NO16-NEXT: fcvt h0, s0
+; CHECK-GI-NO16-NEXT: fcvt s0, h0
+; CHECK-GI-NO16-NEXT: fcvtzu x0, s0
+; CHECK-GI-NO16-NEXT: ret
+;
; CHECK-GI-FP16-LABEL: fcvtzu_f16_i64_7:
; CHECK-GI-FP16: // %bb.0:
; CHECK-GI-FP16-NEXT: adrp x8, .LCPI22_0
@@ -489,21 +573,33 @@ define i64 @fcvtzu_f16_i64_7(half %flt) {
}
define i64 @fcvtzu_f16_i64_15(half %flt) {
-; CHECK-NO16-LABEL: fcvtzu_f16_i64_15:
-; CHECK-NO16: // %bb.0:
-; CHECK-NO16-NEXT: movi v1.2s, #71, lsl #24
-; CHECK-NO16-NEXT: fcvt s0, h0
-; CHECK-NO16-NEXT: fmul s0, s0, s1
-; CHECK-NO16-NEXT: fcvt h0, s0
-; CHECK-NO16-NEXT: fcvt s0, h0
-; CHECK-NO16-NEXT: fcvtzu x0, s0
-; CHECK-NO16-NEXT: ret
+; CHECK-SD-NO16-LABEL: fcvtzu_f16_i64_15:
+; CHECK-SD-NO16: // %bb.0:
+; CHECK-SD-NO16-NEXT: movi v1.2s, #71, lsl #24
+; CHECK-SD-NO16-NEXT: fcvt s0, h0
+; CHECK-SD-NO16-NEXT: fmul s0, s0, s1
+; CHECK-SD-NO16-NEXT: fcvt h0, s0
+; CHECK-SD-NO16-NEXT: fcvt s0, h0
+; CHECK-SD-NO16-NEXT: fcvtzu x0, s0
+; CHECK-SD-NO16-NEXT: ret
;
; CHECK-SD-FP16-LABEL: fcvtzu_f16_i64_15:
; CHECK-SD-FP16: // %bb.0:
; CHECK-SD-FP16-NEXT: fcvtzu x0, h0, #15
; CHECK-SD-FP16-NEXT: ret
;
+; CHECK-GI-NO16-LABEL: fcvtzu_f16_i64_15:
+; CHECK-GI-NO16: // %bb.0:
+; CHECK-GI-NO16-NEXT: adrp x8, .LCPI23_0
+; CHECK-GI-NO16-NEXT: fcvt s0, h0
+; CHECK-GI-NO16-NEXT: ldr h1, [x8, :lo12:.LCPI23_0]
+; CHECK-GI-NO16-NEXT: fcvt s1, h1
+; CHECK-GI-NO16-NEXT: fmul s0, s0, s1
+; CHECK-GI-NO16-NEXT: fcvt h0, s0
+; CHECK-GI-NO16-NEXT: fcvt s0, h0
+; CHECK-GI-NO16-NEXT: fcvtzu x0, s0
+; CHECK-GI-NO16-NEXT: ret
+;
; CHECK-GI-FP16-LABEL: fcvtzu_f16_i64_15:
; CHECK-GI-FP16: // %bb.0:
; CHECK-GI-FP16-NEXT: adrp x8, .LCPI23_0
@@ -678,11 +774,13 @@ define half @scvtf_f16_i32_7(i32 %int) {
;
; CHECK-GI-NO16-LABEL: scvtf_f16_i32_7:
; CHECK-GI-NO16: // %bb.0:
-; CHECK-GI-NO16-NEXT: scvtf s1, w0
-; CHECK-GI-NO16-NEXT: movi v0.2s, #67, lsl #24
-; CHECK-GI-NO16-NEXT: fcvt h1, s1
+; CHECK-GI-NO16-NEXT: scvtf s0, w0
+; CHECK-GI-NO16-NEXT: adrp x8, .LCPI32_0
+; CHECK-GI-NO16-NEXT: ldr h1, [x8, :lo12:.LCPI32_0]
; CHECK-GI-NO16-NEXT: fcvt s1, h1
-; CHECK-GI-NO16-NEXT: fdiv s0, s1, s0
+; CHECK-GI-NO16-NEXT: fcvt h0, s0
+; CHECK-GI-NO16-NEXT: fcvt s0, h0
+; CHECK-GI-NO16-NEXT: fdiv s0, s0, s1
; CHECK-GI-NO16-NEXT: fcvt h0, s0
; CHECK-GI-NO16-NEXT: ret
;
@@ -716,11 +814,13 @@ define half @scvtf_f16_i32_15(i32 %int) {
;
; CHECK-GI-NO16-LABEL: scvtf_f16_i32_15:
; CHECK-GI-NO16: // %bb.0:
-; CHECK-GI-NO16-NEXT: scvtf s1, w0
-; CHECK-GI-NO16-NEXT: movi v0.2s, #71, lsl #24
-; CHECK-GI-NO16-NEXT: fcvt h1, s1
+; CHECK-GI-NO16-NEXT: scvtf s0, w0
+; CHECK-GI-NO16-NEXT: adrp x8, .LCPI33_0
+; CHECK-GI-NO16-NEXT: ldr h1, [x8, :lo12:.LCPI33_0]
; CHECK-GI-NO16-NEXT: fcvt s1, h1
-; CHECK-GI-NO16-NEXT: fdiv s0, s1, s0
+; CHECK-GI-NO16-NEXT: fcvt h0, s0
+; CHECK-GI-NO16-NEXT: fcvt s0, h0
+; CHECK-GI-NO16-NEXT: fdiv s0, s0, s1
; CHECK-GI-NO16-NEXT: fcvt h0, s0
; CHECK-GI-NO16-NEXT: ret
;
@@ -754,11 +854,13 @@ define half @scvtf_f16_i64_7(i64 %long) {
;
; CHECK-GI-NO16-LABEL: scvtf_f16_i64_7:
; CHECK-GI-NO16: // %bb.0:
-; CHECK-GI-NO16-NEXT: scvtf s1, x0
-; CHECK-GI-NO16-NEXT: movi v0.2s, #67, lsl #24
-; CHECK-GI-NO16-NEXT: fcvt h1, s1
+; CHECK-GI-NO16-NEXT: scvtf s0, x0
+; CHECK-GI-NO16-NEXT: adrp x8, .LCPI34_0
+; CHECK-GI-NO16-NEXT: ldr h1, [x8, :lo12:.LCPI34_0]
; CHECK-GI-NO16-NEXT: fcvt s1, h1
-; CHECK-GI-NO16-NEXT: fdiv s0, s1, s0
+; CHECK-GI-NO16-NEXT: fcvt h0, s0
+; CHECK-GI-NO16-NEXT: fcvt s0, h0
+; CHECK-GI-NO16-NEXT: fdiv s0, s0, s1
; CHECK-GI-NO16-NEXT: fcvt h0, s0
; CHECK-GI-NO16-NEXT: ret
;
@@ -792,11 +894,13 @@ define half @scvtf_f16_i64_15(i64 %long) {
;
; CHECK-GI-NO16-LABEL: scvtf_f16_i64_15:
; CHECK-GI-NO16: // %bb.0:
-; CHECK-GI-NO16-NEXT: scvtf s1, x0
-; CHECK-GI-NO16-NEXT: movi v0.2s, #71, lsl #24
-; CHECK-GI-NO16-NEXT: fcvt h1, s1
+; CHECK-GI-NO16-NEXT: scvtf s0, x0
+; CHECK-GI-NO16-NEXT: adrp x8, .LCPI35_0
+; CHECK-GI-NO16-NEXT: ldr h1, [x8, :lo12:.LCPI35_0]
; CHECK-GI-NO16-NEXT: fcvt s1, h1
-; CHECK-GI-NO16-NEXT: fdiv s0, s1, s0
+; CHECK-GI-NO16-NEXT: fcvt h0, s0
+; CHECK-GI-NO16-NEXT: fcvt s0, h0
+; CHECK-GI-NO16-NEXT: fdiv s0, s0, s1
; CHECK-GI-NO16-NEXT: fcvt h0, s0
; CHECK-GI-NO16-NEXT: ret
;
@@ -974,11 +1078,13 @@ define half @ucvtf_f16_i32_7(i32 %int) {
;
; CHECK-GI-NO16-LABEL: ucvtf_f16_i32_7:
; CHECK-GI-NO16: // %bb.0:
-; CHECK-GI-NO16-NEXT: ucvtf s1, w0
-; CHECK-GI-NO16-NEXT: movi v0.2s, #67, lsl #24
-; CHECK-GI-NO16-NEXT: fcvt h1, s1
+; CHECK-GI-NO16-NEXT: ucvtf s0, w0
+; CHECK-GI-NO16-NEXT: adrp x8, .LCPI44_0
+; CHECK-GI-NO16-NEXT: ldr h1, [x8, :lo12:.LCPI44_0]
; CHECK-GI-NO16-NEXT: fcvt s1, h1
-; CHECK-GI-NO16-NEXT: fdiv s0, s1, s0
+; CHECK-GI-NO16-NEXT: fcvt h0, s0
+; CHECK-GI-NO16-NEXT: fcvt s0, h0
+; CHECK-GI-NO16-NEXT: fdiv s0, s0, s1
; CHECK-GI-NO16-NEXT: fcvt h0, s0
; CHECK-GI-NO16-NEXT: ret
;
@@ -1012,11 +1118,13 @@ define half @ucvtf_f16_i32_15(i32 %int) {
;
; CHECK-GI-NO16-LABEL: ucvtf_f16_i32_15:
; CHECK-GI-NO16:...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/162805
More information about the llvm-commits
mailing list