[clang] [llvm] [clang][llvm][LoongArch] Remove definitions and conversions for `f{recipe/rsqrte}.{s/d}` on LA32 (PR #165522)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Oct 29 00:42:13 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-x86
Author: ZhaoQi (zhaoqi5)
<details>
<summary>Changes</summary>
`f{recipe/rsqrte}.{s/d}` are not supported on LA32.
---
Full diff: https://github.com/llvm/llvm-project/pull/165522.diff
13 Files Affected:
- (modified) clang/include/clang/Basic/BuiltinsLoongArchBase.def (+4-4)
- (modified) clang/lib/Headers/larchintrin.h (+1-1)
- (modified) clang/test/CodeGen/LoongArch/builtin-dbl-approximate.c (-1)
- (modified) clang/test/CodeGen/LoongArch/builtin-flt-approximate.c (-1)
- (modified) clang/test/CodeGen/LoongArch/intrinsic-la32-error.c (+10-1)
- (modified) clang/test/CodeGen/LoongArch/intrinsic-la64-error.c (+4-4)
- (modified) llvm/lib/Target/LoongArch/LoongArchFloat32InstrInfo.td (+2-2)
- (modified) llvm/lib/Target/LoongArch/LoongArchFloat64InstrInfo.td (+2-2)
- (modified) llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp (+6-2)
- (modified) llvm/test/CodeGen/LoongArch/fdiv-reciprocal-estimate.ll (+1-4)
- (modified) llvm/test/CodeGen/LoongArch/fsqrt-reciprocal-estimate.ll (+19-54)
- (modified) llvm/test/CodeGen/LoongArch/intrinsic-frecipe-dbl.ll (-1)
- (modified) llvm/test/CodeGen/LoongArch/intrinsic-frecipe-flt.ll (-1)
``````````diff
diff --git a/clang/include/clang/Basic/BuiltinsLoongArchBase.def b/clang/include/clang/Basic/BuiltinsLoongArchBase.def
index a5a07c167908c..cc43eb1722c57 100644
--- a/clang/include/clang/Basic/BuiltinsLoongArchBase.def
+++ b/clang/include/clang/Basic/BuiltinsLoongArchBase.def
@@ -52,7 +52,7 @@ TARGET_BUILTIN(__builtin_loongarch_iocsrwr_d, "vUWiUi", "nc", "64bit")
TARGET_BUILTIN(__builtin_loongarch_lddir_d, "WiWiIUWi", "nc", "64bit")
TARGET_BUILTIN(__builtin_loongarch_ldpte_d, "vWiIUWi", "nc", "64bit")
-TARGET_BUILTIN(__builtin_loongarch_frecipe_s, "ff", "nc", "f,frecipe")
-TARGET_BUILTIN(__builtin_loongarch_frecipe_d, "dd", "nc", "d,frecipe")
-TARGET_BUILTIN(__builtin_loongarch_frsqrte_s, "ff", "nc", "f,frecipe")
-TARGET_BUILTIN(__builtin_loongarch_frsqrte_d, "dd", "nc", "d,frecipe")
+TARGET_BUILTIN(__builtin_loongarch_frecipe_s, "ff", "nc", "f,frecipe,64bit")
+TARGET_BUILTIN(__builtin_loongarch_frecipe_d, "dd", "nc", "d,frecipe,64bit")
+TARGET_BUILTIN(__builtin_loongarch_frsqrte_s, "ff", "nc", "f,frecipe,64bit")
+TARGET_BUILTIN(__builtin_loongarch_frsqrte_d, "dd", "nc", "d,frecipe,64bit")
diff --git a/clang/lib/Headers/larchintrin.h b/clang/lib/Headers/larchintrin.h
index a1247d12e21f8..e1d06a4535091 100644
--- a/clang/lib/Headers/larchintrin.h
+++ b/clang/lib/Headers/larchintrin.h
@@ -226,7 +226,6 @@ extern __inline void
#define __ldpte_d(/*long int*/ _1, /*ui5*/ _2) \
((void)__builtin_loongarch_ldpte_d((long int)(_1), (_2)))
-#endif
#ifdef __loongarch_frecipe
extern __inline float
@@ -253,6 +252,7 @@ extern __inline double
return __builtin_loongarch_frsqrte_d(_1);
}
#endif
+#endif
#ifdef __cplusplus
}
diff --git a/clang/test/CodeGen/LoongArch/builtin-dbl-approximate.c b/clang/test/CodeGen/LoongArch/builtin-dbl-approximate.c
index e5fe684346c00..4c4e2428d7e62 100644
--- a/clang/test/CodeGen/LoongArch/builtin-dbl-approximate.c
+++ b/clang/test/CodeGen/LoongArch/builtin-dbl-approximate.c
@@ -1,5 +1,4 @@
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 4
-// RUN: %clang_cc1 -triple loongarch32 -target-feature +d -target-feature +frecipe -O2 -emit-llvm %s -o - | FileCheck %s
// RUN: %clang_cc1 -triple loongarch64 -target-feature +d -target-feature +frecipe -O2 -emit-llvm %s -o - | FileCheck %s
#include <larchintrin.h>
diff --git a/clang/test/CodeGen/LoongArch/builtin-flt-approximate.c b/clang/test/CodeGen/LoongArch/builtin-flt-approximate.c
index 47bb47084364b..e544cde4e6131 100644
--- a/clang/test/CodeGen/LoongArch/builtin-flt-approximate.c
+++ b/clang/test/CodeGen/LoongArch/builtin-flt-approximate.c
@@ -1,5 +1,4 @@
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 4
-// RUN: %clang_cc1 -triple loongarch32 -target-feature +f -target-feature +frecipe -O2 -emit-llvm %s -o - | FileCheck %s
// RUN: %clang_cc1 -triple loongarch64 -target-feature +f -target-feature +frecipe -O2 -emit-llvm %s -o - | FileCheck %s
#include <larchintrin.h>
diff --git a/clang/test/CodeGen/LoongArch/intrinsic-la32-error.c b/clang/test/CodeGen/LoongArch/intrinsic-la32-error.c
index 89ce0052214e2..8032919d18ef5 100644
--- a/clang/test/CodeGen/LoongArch/intrinsic-la32-error.c
+++ b/clang/test/CodeGen/LoongArch/intrinsic-la32-error.c
@@ -5,7 +5,7 @@
#include <larchintrin.h>
#ifdef FEATURE_CHECK
-void test_feature(long *v_l, unsigned long *v_ul, int *v_i, unsigned ui, char c, short s) {
+void test_feature(long *v_l, unsigned long *v_ul, int *v_i, unsigned ui, char c, short s, float a, double b) {
// CHECK: error: '__builtin_loongarch_cacop_d' needs target feature 64bit
__builtin_loongarch_cacop_d(1, v_ul[0], 1024);
@@ -49,6 +49,15 @@ void test_feature(long *v_l, unsigned long *v_ul, int *v_i, unsigned ui, char c,
v_ul[4] = __builtin_loongarch_lddir_d(v_l[0], 1);
// CHECK: error: '__builtin_loongarch_ldpte_d' needs target feature 64bit
__builtin_loongarch_ldpte_d(v_l[0], 1);
+
+// CHECK: error: '__builtin_loongarch_frecipe_s' needs target feature f,frecipe,64bit
+ float f1 = __builtin_loongarch_frecipe_s(a);
+// CHECK: error: '__builtin_loongarch_frsqrte_s' needs target feature f,frecipe,64bit
+ float f2 = __builtin_loongarch_frsqrte_s(a);
+// CHECK: error: '__builtin_loongarch_frecipe_d' needs target feature d,frecipe,64bit
+ double d1 = __builtin_loongarch_frecipe_d(b);
+// CHECK: error: '__builtin_loongarch_frsqrte_d' needs target feature d,frecipe,64bit
+ double d2 = __builtin_loongarch_frsqrte_d(b);
}
#endif
diff --git a/clang/test/CodeGen/LoongArch/intrinsic-la64-error.c b/clang/test/CodeGen/LoongArch/intrinsic-la64-error.c
index 085f3fdc89bad..b5348b73d2aed 100644
--- a/clang/test/CodeGen/LoongArch/intrinsic-la64-error.c
+++ b/clang/test/CodeGen/LoongArch/intrinsic-la64-error.c
@@ -12,13 +12,13 @@ void test_feature(unsigned long *v_ul, int *v_i, float a, double b) {
v_i[0] = __builtin_loongarch_movfcsr2gr(1);
// CHECK: error: '__builtin_loongarch_movgr2fcsr' needs target feature f
__builtin_loongarch_movgr2fcsr(1, v_i[1]);
-// CHECK: error: '__builtin_loongarch_frecipe_s' needs target feature f,frecipe
+// CHECK: error: '__builtin_loongarch_frecipe_s' needs target feature f,frecipe,64bit
float f1 = __builtin_loongarch_frecipe_s(a);
-// CHECK: error: '__builtin_loongarch_frsqrte_s' needs target feature f,frecipe
+// CHECK: error: '__builtin_loongarch_frsqrte_s' needs target feature f,frecipe,64bit
float f2 = __builtin_loongarch_frsqrte_s(a);
-// CHECK: error: '__builtin_loongarch_frecipe_d' needs target feature d,frecipe
+// CHECK: error: '__builtin_loongarch_frecipe_d' needs target feature d,frecipe,64bit
double d1 = __builtin_loongarch_frecipe_d(b);
-// CHECK: error: '__builtin_loongarch_frsqrte_d' needs target feature d,frecipe
+// CHECK: error: '__builtin_loongarch_frsqrte_d' needs target feature d,frecipe,64bit
double d2 = __builtin_loongarch_frsqrte_d(b);
}
#endif
diff --git a/llvm/lib/Target/LoongArch/LoongArchFloat32InstrInfo.td b/llvm/lib/Target/LoongArch/LoongArchFloat32InstrInfo.td
index 690dd73014e57..e9aa00f013e93 100644
--- a/llvm/lib/Target/LoongArch/LoongArchFloat32InstrInfo.td
+++ b/llvm/lib/Target/LoongArch/LoongArchFloat32InstrInfo.td
@@ -316,13 +316,13 @@ def : Pat<(fdiv (loongarch_movgr2fr_w (i32 1065353216)), FPR32:$src),
(FRECIP_S $src)>;
} // Predicates = [HasBasicF, IsLA32]
-let Predicates = [HasFrecipe] in {
+let Predicates = [HasFrecipe, IsLA64] in {
// FP approximate reciprocal operation
def : Pat<(int_loongarch_frecipe_s FPR32:$src), (FRECIPE_S FPR32:$src)>;
def : Pat<(int_loongarch_frsqrte_s FPR32:$src), (FRSQRTE_S FPR32:$src)>;
def : Pat<(loongarch_frecipe FPR32:$src), (FRECIPE_S FPR32:$src)>;
def : Pat<(loongarch_frsqrte FPR32:$src), (FRSQRTE_S FPR32:$src)>;
-}
+} // Predicates = [HasFrecipe, IsLA64]
// fmadd.s: fj * fk + fa
def : Pat<(fma FPR32:$fj, FPR32:$fk, FPR32:$fa), (FMADD_S $fj, $fk, $fa)>;
diff --git a/llvm/lib/Target/LoongArch/LoongArchFloat64InstrInfo.td b/llvm/lib/Target/LoongArch/LoongArchFloat64InstrInfo.td
index daefbaa52d42a..3cdcdb688fb5b 100644
--- a/llvm/lib/Target/LoongArch/LoongArchFloat64InstrInfo.td
+++ b/llvm/lib/Target/LoongArch/LoongArchFloat64InstrInfo.td
@@ -277,13 +277,13 @@ def : Pat<(fdiv (loongarch_movgr2fr_d_lo_hi (i32 0), (i32 1072693248)), FPR64:$s
(FRECIP_D FPR64:$src)>;
} // Predicates = [IsLA32]
-let Predicates = [HasFrecipe] in {
+let Predicates = [HasFrecipe, IsLA64] in {
// FP approximate reciprocal operation
def : Pat<(int_loongarch_frecipe_d FPR64:$src), (FRECIPE_D FPR64:$src)>;
def : Pat<(int_loongarch_frsqrte_d FPR64:$src), (FRSQRTE_D FPR64:$src)>;
def : Pat<(loongarch_frecipe FPR64:$src), (FRECIPE_D FPR64:$src)>;
def : Pat<(loongarch_frsqrte FPR64:$src), (FRSQRTE_D FPR64:$src)>;
-}
+} // Predicates = [HasFrecipe, IsLA64]
// fmadd.d: fj * fk + fa
def : Pat<(fma FPR64:$fj, FPR64:$fk, FPR64:$fa), (FMADD_D $fj, $fk, $fa)>;
diff --git a/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp b/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp
index 80c96c6dc8eb6..2960b320701d5 100644
--- a/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp
+++ b/llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp
@@ -9097,6 +9097,7 @@ static int getEstimateRefinementSteps(EVT VT,
return RefinementSteps;
}
+// NOTE: May cause worse results. See tests in 'fsqrt-reciprocal-estimate.ll'.
SDValue LoongArchTargetLowering::getSqrtEstimate(SDValue Operand,
SelectionDAG &DAG, int Enabled,
int &RefinementSteps,
@@ -9106,7 +9107,8 @@ SDValue LoongArchTargetLowering::getSqrtEstimate(SDValue Operand,
SDLoc DL(Operand);
EVT VT = Operand.getValueType();
- if (VT == MVT::f32 || (VT == MVT::f64 && Subtarget.hasBasicD()) ||
+ if (((VT == MVT::f32 || (VT == MVT::f64 && Subtarget.hasBasicD())) &&
+ Subtarget.is64Bit()) ||
(VT == MVT::v4f32 && Subtarget.hasExtLSX()) ||
(VT == MVT::v2f64 && Subtarget.hasExtLSX()) ||
(VT == MVT::v8f32 && Subtarget.hasExtLASX()) ||
@@ -9126,6 +9128,7 @@ SDValue LoongArchTargetLowering::getSqrtEstimate(SDValue Operand,
return SDValue();
}
+// NOTE: May cause worse results. See tests in 'fdiv-reciprocal-estimate.ll'.
SDValue LoongArchTargetLowering::getRecipEstimate(SDValue Operand,
SelectionDAG &DAG,
int Enabled,
@@ -9134,7 +9137,8 @@ SDValue LoongArchTargetLowering::getRecipEstimate(SDValue Operand,
SDLoc DL(Operand);
EVT VT = Operand.getValueType();
- if (VT == MVT::f32 || (VT == MVT::f64 && Subtarget.hasBasicD()) ||
+ if (((VT == MVT::f32 || (VT == MVT::f64 && Subtarget.hasBasicD())) &&
+ Subtarget.is64Bit()) ||
(VT == MVT::v4f32 && Subtarget.hasExtLSX()) ||
(VT == MVT::v2f64 && Subtarget.hasExtLSX()) ||
(VT == MVT::v8f32 && Subtarget.hasExtLASX()) ||
diff --git a/llvm/test/CodeGen/LoongArch/fdiv-reciprocal-estimate.ll b/llvm/test/CodeGen/LoongArch/fdiv-reciprocal-estimate.ll
index 63c26bd016b0e..8995dac2458bf 100644
--- a/llvm/test/CodeGen/LoongArch/fdiv-reciprocal-estimate.ll
+++ b/llvm/test/CodeGen/LoongArch/fdiv-reciprocal-estimate.ll
@@ -14,10 +14,7 @@ define float @fdiv_s(float %x, float %y) {
;
; LA32F-FRECIPE-LABEL: fdiv_s:
; LA32F-FRECIPE: # %bb.0:
-; LA32F-FRECIPE-NEXT: frecipe.s $fa2, $fa1
-; LA32F-FRECIPE-NEXT: fmul.s $fa3, $fa0, $fa2
-; LA32F-FRECIPE-NEXT: fnmsub.s $fa0, $fa1, $fa3, $fa0
-; LA32F-FRECIPE-NEXT: fmadd.s $fa0, $fa2, $fa0, $fa3
+; LA32F-FRECIPE-NEXT: fdiv.s $fa0, $fa0, $fa1
; LA32F-FRECIPE-NEXT: ret
;
; LA64D-LABEL: fdiv_s:
diff --git a/llvm/test/CodeGen/LoongArch/fsqrt-reciprocal-estimate.ll b/llvm/test/CodeGen/LoongArch/fsqrt-reciprocal-estimate.ll
index d875bb98e4593..de03eded5f1c4 100644
--- a/llvm/test/CodeGen/LoongArch/fsqrt-reciprocal-estimate.ll
+++ b/llvm/test/CodeGen/LoongArch/fsqrt-reciprocal-estimate.ll
@@ -16,16 +16,7 @@ define float @frsqrt_f32(float %a) nounwind {
;
; LA32F-FRECIPE-LABEL: frsqrt_f32:
; LA32F-FRECIPE: # %bb.0:
-; LA32F-FRECIPE-NEXT: frsqrte.s $fa1, $fa0
-; LA32F-FRECIPE-NEXT: fmul.s $fa1, $fa0, $fa1
-; LA32F-FRECIPE-NEXT: fmul.s $fa0, $fa0, $fa1
-; LA32F-FRECIPE-NEXT: lu12i.w $a0, -261120
-; LA32F-FRECIPE-NEXT: movgr2fr.w $fa2, $a0
-; LA32F-FRECIPE-NEXT: fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32F-FRECIPE-NEXT: lu12i.w $a0, -266240
-; LA32F-FRECIPE-NEXT: movgr2fr.w $fa2, $a0
-; LA32F-FRECIPE-NEXT: fmul.s $fa1, $fa1, $fa2
-; LA32F-FRECIPE-NEXT: fmul.s $fa0, $fa1, $fa0
+; LA32F-FRECIPE-NEXT: frsqrt.s $fa0, $fa0
; LA32F-FRECIPE-NEXT: ret
;
; LA64D-LABEL: frsqrt_f32:
@@ -553,22 +544,14 @@ define float @sqrt_simplify_before_recip_3_uses_f32(float %x, ptr %p1, ptr %p2)
;
; LA32F-FRECIPE-LABEL: sqrt_simplify_before_recip_3_uses_f32:
; LA32F-FRECIPE: # %bb.0:
-; LA32F-FRECIPE-NEXT: frsqrte.s $fa1, $fa0
-; LA32F-FRECIPE-NEXT: fmul.s $fa1, $fa0, $fa1
-; LA32F-FRECIPE-NEXT: fmul.s $fa2, $fa0, $fa1
-; LA32F-FRECIPE-NEXT: lu12i.w $a2, -261120
-; LA32F-FRECIPE-NEXT: movgr2fr.w $fa3, $a2
-; LA32F-FRECIPE-NEXT: fmadd.s $fa2, $fa2, $fa1, $fa3
-; LA32F-FRECIPE-NEXT: lu12i.w $a2, -266240
-; LA32F-FRECIPE-NEXT: movgr2fr.w $fa3, $a2
-; LA32F-FRECIPE-NEXT: fmul.s $fa1, $fa1, $fa3
-; LA32F-FRECIPE-NEXT: fmul.s $fa1, $fa1, $fa2
+; LA32F-FRECIPE-NEXT: fsqrt.s $fa1, $fa0
+; LA32F-FRECIPE-NEXT: frsqrt.s $fa0, $fa0
; LA32F-FRECIPE-NEXT: lu12i.w $a2, 270976
; LA32F-FRECIPE-NEXT: movgr2fr.w $fa2, $a2
-; LA32F-FRECIPE-NEXT: fmul.s $fa2, $fa1, $fa2
-; LA32F-FRECIPE-NEXT: fmul.s $fa0, $fa0, $fa1
-; LA32F-FRECIPE-NEXT: fst.s $fa1, $a0, 0
+; LA32F-FRECIPE-NEXT: fdiv.s $fa2, $fa2, $fa1
+; LA32F-FRECIPE-NEXT: fst.s $fa0, $a0, 0
; LA32F-FRECIPE-NEXT: fst.s $fa2, $a1, 0
+; LA32F-FRECIPE-NEXT: fmov.s $fa0, $fa1
; LA32F-FRECIPE-NEXT: ret
;
; LA64D-LABEL: sqrt_simplify_before_recip_3_uses_f32:
@@ -628,26 +611,18 @@ define float @sqrt_simplify_before_recip_4_uses_f32(float %x, ptr %p1, ptr %p2,
;
; LA32F-FRECIPE-LABEL: sqrt_simplify_before_recip_4_uses_f32:
; LA32F-FRECIPE: # %bb.0:
-; LA32F-FRECIPE-NEXT: frsqrte.s $fa1, $fa0
-; LA32F-FRECIPE-NEXT: fmul.s $fa1, $fa0, $fa1
-; LA32F-FRECIPE-NEXT: fmul.s $fa2, $fa0, $fa1
-; LA32F-FRECIPE-NEXT: lu12i.w $a3, -261120
-; LA32F-FRECIPE-NEXT: movgr2fr.w $fa3, $a3
-; LA32F-FRECIPE-NEXT: fmadd.s $fa2, $fa2, $fa1, $fa3
-; LA32F-FRECIPE-NEXT: lu12i.w $a3, -266240
-; LA32F-FRECIPE-NEXT: movgr2fr.w $fa3, $a3
-; LA32F-FRECIPE-NEXT: fmul.s $fa1, $fa1, $fa3
-; LA32F-FRECIPE-NEXT: fmul.s $fa1, $fa1, $fa2
+; LA32F-FRECIPE-NEXT: fsqrt.s $fa1, $fa0
+; LA32F-FRECIPE-NEXT: frsqrt.s $fa0, $fa0
; LA32F-FRECIPE-NEXT: lu12i.w $a3, 270976
; LA32F-FRECIPE-NEXT: movgr2fr.w $fa2, $a3
-; LA32F-FRECIPE-NEXT: fmul.s $fa2, $fa1, $fa2
+; LA32F-FRECIPE-NEXT: fdiv.s $fa2, $fa2, $fa1
; LA32F-FRECIPE-NEXT: lu12i.w $a3, 271040
; LA32F-FRECIPE-NEXT: movgr2fr.w $fa3, $a3
-; LA32F-FRECIPE-NEXT: fmul.s $fa3, $fa1, $fa3
-; LA32F-FRECIPE-NEXT: fmul.s $fa0, $fa0, $fa1
-; LA32F-FRECIPE-NEXT: fst.s $fa1, $a0, 0
+; LA32F-FRECIPE-NEXT: fdiv.s $fa3, $fa3, $fa1
+; LA32F-FRECIPE-NEXT: fst.s $fa0, $a0, 0
; LA32F-FRECIPE-NEXT: fst.s $fa2, $a1, 0
; LA32F-FRECIPE-NEXT: fst.s $fa3, $a2, 0
+; LA32F-FRECIPE-NEXT: fmov.s $fa0, $fa1
; LA32F-FRECIPE-NEXT: ret
;
; LA64D-LABEL: sqrt_simplify_before_recip_4_uses_f32:
@@ -714,25 +689,15 @@ define float @sqrt_simplify_before_recip_3_uses_order_f32(float %x, ptr %p1, ptr
;
; LA32F-FRECIPE-LABEL: sqrt_simplify_before_recip_3_uses_order_f32:
; LA32F-FRECIPE: # %bb.0:
-; LA32F-FRECIPE-NEXT: frsqrte.s $fa1, $fa0
-; LA32F-FRECIPE-NEXT: fmul.s $fa1, $fa0, $fa1
-; LA32F-FRECIPE-NEXT: fmul.s $fa2, $fa0, $fa1
-; LA32F-FRECIPE-NEXT: lu12i.w $a2, -261120
-; LA32F-FRECIPE-NEXT: movgr2fr.w $fa3, $a2
-; LA32F-FRECIPE-NEXT: fmadd.s $fa2, $fa2, $fa1, $fa3
-; LA32F-FRECIPE-NEXT: lu12i.w $a2, -266240
-; LA32F-FRECIPE-NEXT: movgr2fr.w $fa3, $a2
-; LA32F-FRECIPE-NEXT: fmul.s $fa1, $fa1, $fa3
-; LA32F-FRECIPE-NEXT: fmul.s $fa1, $fa1, $fa2
-; LA32F-FRECIPE-NEXT: fmul.s $fa0, $fa0, $fa1
+; LA32F-FRECIPE-NEXT: fsqrt.s $fa0, $fa0
; LA32F-FRECIPE-NEXT: lu12i.w $a2, 270976
-; LA32F-FRECIPE-NEXT: movgr2fr.w $fa2, $a2
-; LA32F-FRECIPE-NEXT: fmul.s $fa2, $fa1, $fa2
+; LA32F-FRECIPE-NEXT: movgr2fr.w $fa1, $a2
+; LA32F-FRECIPE-NEXT: fdiv.s $fa1, $fa1, $fa0
; LA32F-FRECIPE-NEXT: lu12i.w $a2, 271040
-; LA32F-FRECIPE-NEXT: movgr2fr.w $fa3, $a2
-; LA32F-FRECIPE-NEXT: fmul.s $fa1, $fa1, $fa3
-; LA32F-FRECIPE-NEXT: fst.s $fa2, $a0, 0
-; LA32F-FRECIPE-NEXT: fst.s $fa1, $a1, 0
+; LA32F-FRECIPE-NEXT: movgr2fr.w $fa2, $a2
+; LA32F-FRECIPE-NEXT: fdiv.s $fa2, $fa2, $fa0
+; LA32F-FRECIPE-NEXT: fst.s $fa1, $a0, 0
+; LA32F-FRECIPE-NEXT: fst.s $fa2, $a1, 0
; LA32F-FRECIPE-NEXT: ret
;
; LA64D-LABEL: sqrt_simplify_before_recip_3_uses_order_f32:
diff --git a/llvm/test/CodeGen/LoongArch/intrinsic-frecipe-dbl.ll b/llvm/test/CodeGen/LoongArch/intrinsic-frecipe-dbl.ll
index 9f572500caa0e..2797ebde43b96 100644
--- a/llvm/test/CodeGen/LoongArch/intrinsic-frecipe-dbl.ll
+++ b/llvm/test/CodeGen/LoongArch/intrinsic-frecipe-dbl.ll
@@ -1,4 +1,3 @@
-; RUN: llc --mtriple=loongarch32 --mattr=+d,+frecipe < %s | FileCheck %s
; RUN: llc --mtriple=loongarch64 --mattr=+d,+frecipe < %s | FileCheck %s
declare double @llvm.loongarch.frecipe.d(double)
diff --git a/llvm/test/CodeGen/LoongArch/intrinsic-frecipe-flt.ll b/llvm/test/CodeGen/LoongArch/intrinsic-frecipe-flt.ll
index 0b2029f2e44a0..8e7f5f3f3b242 100644
--- a/llvm/test/CodeGen/LoongArch/intrinsic-frecipe-flt.ll
+++ b/llvm/test/CodeGen/LoongArch/intrinsic-frecipe-flt.ll
@@ -1,4 +1,3 @@
-; RUN: llc --mtriple=loongarch32 --mattr=+f,+frecipe < %s | FileCheck %s
; RUN: llc --mtriple=loongarch64 --mattr=+f,+frecipe < %s | FileCheck %s
declare float @llvm.loongarch.frecipe.s(float)
``````````
</details>
https://github.com/llvm/llvm-project/pull/165522
More information about the cfe-commits
mailing list