[llvm] 91033f9 - [AArch64][GISel] Allow import of DAG FCVT/CVTF patterns using fixedpoint immediate (#215812)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 25 06:43:46 PDT 2026
Author: Kieran B
Date: 2026-08-25T14:43:41+01:00
New Revision: 91033f9e0753a76f66bff43e63485c77531108c5
URL: https://github.com/llvm/llvm-project/commit/91033f9e0753a76f66bff43e63485c77531108c5
DIFF: https://github.com/llvm/llvm-project/commit/91033f9e0753a76f66bff43e63485c77531108c5.diff
LOG: [AArch64][GISel] Allow import of DAG FCVT/CVTF patterns using fixedpoint immediate (#215812)
Currently, fp_to_int(fmul) patterns only work for DAG, this is due to
the use of fixedpoint immediate type which GISel could not import.
Add GlobalISel matchers for fixed-point immediates, allowing these
patterns to be imported and used during instruction selection.
I originally added these to allow fp_to_int(fmul) fold DAG patterns from
this [PR](https://github.com/llvm/llvm-project/pull/210987) to import,
but this also enables fdiv(int_to_fmul) folds to work in GISel
Added:
Modified:
llvm/lib/Target/AArch64/AArch64InstrInfo.td
llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp
llvm/test/CodeGen/AArch64/fcvt-fixed.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/AArch64/AArch64InstrInfo.td b/llvm/lib/Target/AArch64/AArch64InstrInfo.td
index 07f8c2ccbd07d..e876ef7597454 100644
--- a/llvm/lib/Target/AArch64/AArch64InstrInfo.td
+++ b/llvm/lib/Target/AArch64/AArch64InstrInfo.td
@@ -7191,33 +7191,46 @@ defm : FPToIntegerIntPats<int_aarch64_neon_fcvtzu, "FCVTZU">;
// This thing just allows us to change the type of the node produced. The imm
// value we want is already in V from SelectCVTFixedPointVec.
-def fixedpoint_vec_xform : SDNodeXForm<timm, [{
+def fixedpoint_xform : SDNodeXForm<timm, [{
(void)N;
return V;
}]>;
-def gi_fixedpoint_vec_xform : GICustomOperandRenderer<"renderFixedPointXForm">,
- GISDNodeXFormEquiv<fixedpoint_vec_xform>;
+def gi_fixedpoint_xform : GICustomOperandRenderer<"renderFixedPointXForm">,
+ GISDNodeXFormEquiv<fixedpoint_xform>;
+
+def gi_fixedpoint_f16_i32 : GIComplexOperandMatcher<s32, "selectCVTFixedPoint<32>">,
+ GIComplexPatternEquiv<fixedpoint_f16_i32>;
+def gi_fixedpoint_f16_i64 : GIComplexOperandMatcher<s32, "selectCVTFixedPoint<64>">,
+ GIComplexPatternEquiv<fixedpoint_f16_i64>;
+def gi_fixedpoint_f32_i32 : GIComplexOperandMatcher<s32, "selectCVTFixedPoint<32>">,
+ GIComplexPatternEquiv<fixedpoint_f32_i32>;
+def gi_fixedpoint_f32_i64 : GIComplexOperandMatcher<s32, "selectCVTFixedPoint<64>">,
+ GIComplexPatternEquiv<fixedpoint_f32_i64>;
+def gi_fixedpoint_f64_i32 : GIComplexOperandMatcher<s64, "selectCVTFixedPoint<32>">,
+ GIComplexPatternEquiv<fixedpoint_f64_i32>;
+def gi_fixedpoint_f64_i64 : GIComplexOperandMatcher<s64, "selectCVTFixedPoint<64>">,
+ GIComplexPatternEquiv<fixedpoint_f64_i64>;
multiclass FPToIntegerFmulPats<SDPatternOperator round, string INST> {
let Predicates = [HasFullFP16] in {
def : Pat<(i32 (round (fmul f16:$Rn, fixedpoint_f16_i32:$scale))),
- (!cast<Instruction>(INST # SWHri) $Rn, $scale)>;
+ (!cast<Instruction>(INST # SWHri) $Rn, fixedpoint_f16_i32:$scale)>;
def : Pat<(i64 (round (fmul f16:$Rn, fixedpoint_f16_i64:$scale))),
- (!cast<Instruction>(INST # SXHri) $Rn, $scale)>;
+ (!cast<Instruction>(INST # SXHri) $Rn, fixedpoint_f16_i64:$scale)>;
}
def : Pat<(i32 (round (fmul f32:$Rn, fixedpoint_f32_i32:$scale))),
- (!cast<Instruction>(INST # SWSri) $Rn, $scale)>;
+ (!cast<Instruction>(INST # SWSri) $Rn, fixedpoint_f32_i32:$scale)>;
def : Pat<(i64 (round (fmul f32:$Rn, fixedpoint_f32_i64:$scale))),
- (!cast<Instruction>(INST # SXSri) $Rn, $scale)>;
+ (!cast<Instruction>(INST # SXSri) $Rn, fixedpoint_f32_i64:$scale)>;
def : Pat<(i32 (round (fmul f64:$Rn, fixedpoint_f64_i32:$scale))),
- (!cast<Instruction>(INST # SWDri) $Rn, $scale)>;
+ (!cast<Instruction>(INST # SWDri) $Rn, fixedpoint_f64_i32:$scale)>;
def : Pat<(i64 (round (fmul f64:$Rn, fixedpoint_f64_i64:$scale))),
(!cast<Instruction>(INST # SXDri) $Rn, $scale)>;
def : Pat<(f32 (bitconvert (i32 (round (fmul FPR32:$Rn, fixedpoint_f32_i32:$scale))))),
- (!cast<Instruction>(INST # "s") FPR32:$Rn, (fixedpoint_vec_xform fixedpoint_f32_i32:$scale))>;
+ (!cast<Instruction>(INST # "s") FPR32:$Rn, (fixedpoint_xform fixedpoint_f32_i32:$scale))>;
def : Pat<(f64 (bitconvert (i64 (round (fmul FPR64:$Rn, fixedpoint_f64_i64:$scale))))),
- (!cast<Instruction>(INST # "d") FPR64:$Rn, (fixedpoint_vec_xform fixedpoint_f64_i64:$scale))>;
+ (!cast<Instruction>(INST # "d") FPR64:$Rn, (fixedpoint_xform fixedpoint_f64_i64:$scale))>;
}
defm : FPToIntegerFmulPats<any_fp_to_sint, "FCVTZS">;
@@ -7282,23 +7295,23 @@ multiclass FPToIntegerSatPats<SDNode to_int_sat, string INST> {
let Predicates = [HasFullFP16] in {
def : Pat<(i32 (to_int_sat (fmul f16:$Rn, fixedpoint_f16_i32:$scale), i32)),
- (!cast<Instruction>(INST # SWHri) $Rn, $scale)>;
+ (!cast<Instruction>(INST # SWHri) $Rn, fixedpoint_f16_i32:$scale)>;
def : Pat<(i64 (to_int_sat (fmul f16:$Rn, fixedpoint_f16_i64:$scale), i64)),
- (!cast<Instruction>(INST # SXHri) $Rn, $scale)>;
+ (!cast<Instruction>(INST # SXHri) $Rn, fixedpoint_f16_i64:$scale)>;
}
def : Pat<(i32 (to_int_sat (fmul f32:$Rn, fixedpoint_f32_i32:$scale), i32)),
- (!cast<Instruction>(INST # SWSri) $Rn, $scale)>;
+ (!cast<Instruction>(INST # SWSri) $Rn, fixedpoint_f32_i32:$scale)>;
def : Pat<(i64 (to_int_sat (fmul f32:$Rn, fixedpoint_f32_i64:$scale), i64)),
- (!cast<Instruction>(INST # SXSri) $Rn, $scale)>;
+ (!cast<Instruction>(INST # SXSri) $Rn, fixedpoint_f32_i64:$scale)>;
def : Pat<(i32 (to_int_sat (fmul f64:$Rn, fixedpoint_f64_i32:$scale), i32)),
- (!cast<Instruction>(INST # SWDri) $Rn, $scale)>;
+ (!cast<Instruction>(INST # SWDri) $Rn, fixedpoint_f64_i32:$scale)>;
def : Pat<(i64 (to_int_sat (fmul f64:$Rn, fixedpoint_f64_i64:$scale), i64)),
- (!cast<Instruction>(INST # SXDri) $Rn, $scale)>;
+ (!cast<Instruction>(INST # SXDri) $Rn, fixedpoint_f64_i64:$scale)>;
def : Pat<(f32 (bitconvert (i32 (to_int_sat (fmul FPR32:$Rn, fixedpoint_f32_i32:$scale), i32)))),
- (!cast<Instruction>(INST # "s") FPR32:$Rn, (fixedpoint_vec_xform fixedpoint_f32_i32:$scale))>;
+ (!cast<Instruction>(INST # "s") FPR32:$Rn, (fixedpoint_xform fixedpoint_f32_i32:$scale))>;
def : Pat<(f64 (bitconvert (i64 (to_int_sat (fmul FPR64:$Rn, fixedpoint_f64_i64:$scale), i64)))),
- (!cast<Instruction>(INST # "d") FPR64:$Rn, (fixedpoint_vec_xform fixedpoint_f64_i64:$scale))>;
+ (!cast<Instruction>(INST # "d") FPR64:$Rn, (fixedpoint_xform fixedpoint_f64_i64:$scale))>;
}
defm : FPToIntegerSatPats<fp_to_sint_sat, "FCVTZS">;
@@ -9827,15 +9840,15 @@ multiclass FCVTPat<ValueType FVT, ValueType IVT, ValueType ScalarVT, RegisterOpe
// fptosi(fmul(x, power2)) -> FCVTZS_shift x, log2(power2)
def : Pat<(IVT (fp_to_sint (FVT (fmul FVT:$Vn, fixedpoint:$scale)))),
- (!cast<Instruction>("FCVTZS"#IVT#"_shift") $Vn, (fixedpoint_vec_xform fixedpoint:$scale))>;
+ (!cast<Instruction>("FCVTZS"#IVT#"_shift") $Vn, (fixedpoint_xform fixedpoint:$scale))>;
def : Pat<(IVT (fp_to_sint_sat (FVT (fmul FVT:$Vn, fixedpoint:$scale)), ScalarVT)),
- (!cast<Instruction>("FCVTZS"#IVT#"_shift") $Vn, (fixedpoint_vec_xform fixedpoint:$scale))>;
+ (!cast<Instruction>("FCVTZS"#IVT#"_shift") $Vn, (fixedpoint_xform fixedpoint:$scale))>;
// fptoui(fmul(x, power2)) -> FCVTZU_shift x, log2(power2)
def : Pat<(IVT (fp_to_uint (FVT (fmul FVT:$Vn, fixedpoint:$scale)))),
- (!cast<Instruction>("FCVTZU"#IVT#"_shift") $Vn, (fixedpoint_vec_xform fixedpoint:$scale))>;
+ (!cast<Instruction>("FCVTZU"#IVT#"_shift") $Vn, (fixedpoint_xform fixedpoint:$scale))>;
def : Pat<(IVT (fp_to_uint_sat (FVT (fmul FVT:$Vn, fixedpoint:$scale)), ScalarVT)),
- (!cast<Instruction>("FCVTZU"#IVT#"_shift") $Vn, (fixedpoint_vec_xform fixedpoint:$scale))>;
+ (!cast<Instruction>("FCVTZU"#IVT#"_shift") $Vn, (fixedpoint_xform fixedpoint:$scale))>;
}
let Predicates = [HasNEON] in {
diff --git a/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp b/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp
index ee0318fbf26fb..0b018dc7b22a8 100644
--- a/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp
+++ b/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp
@@ -481,19 +481,23 @@ class AArch64InstructionSelector : public InstructionSelector {
ComplexRendererFns selectArithExtendedRegister(MachineOperand &Root) const;
ComplexRendererFns selectExtractHigh(MachineOperand &Root) const;
-
+ template <unsigned Width>
+ ComplexRendererFns selectCVTFixedPoint(MachineOperand &Root) const;
+ ComplexRendererFns selectCVTFixedPointBase(const MachineOperand &Root,
+ unsigned width,
+ bool isReciprocal = false) const;
ComplexRendererFns selectCVTFixedPointVec(MachineOperand &Root) const;
ComplexRendererFns
selectCVTFixedPosRecipOperandVec(MachineOperand &Root) const;
- ComplexRendererFns
- selectCVTFixedPointVecBase(const MachineOperand &Root,
- bool isReciprocal = false) const;
void renderFixedPointScalarXForm(MachineInstrBuilder &MIB,
const MachineInstr &MI, int OpIdx) const;
+ unsigned getFixedPointWidthFromOperand(const MachineOperand &Root) const;
void renderFixedPointXForm(MachineInstrBuilder &MIB, const MachineInstr &MI,
int OpIdx = -1) const;
void renderFixedPointRecipXForm(MachineInstrBuilder &MIB,
const MachineInstr &MI, int OpIdx = -1) const;
+ void renderFixedPointImm(MachineInstrBuilder &MIB, const MachineOperand &Root,
+ unsigned Width, bool isReciprocal) const;
void renderTruncImm(MachineInstrBuilder &MIB, const MachineInstr &MI,
int OpIdx = -1) const;
void renderLogicalImm32(MachineInstrBuilder &MIB, const MachineInstr &I,
@@ -7961,24 +7965,29 @@ AArch64InstructionSelector::selectExtractHigh(MachineOperand &Root) const {
}
InstructionSelector::ComplexRendererFns
-AArch64InstructionSelector::selectCVTFixedPointVecBase(
- const MachineOperand &Root, bool isReciprocal) const {
+AArch64InstructionSelector::selectCVTFixedPointBase(const MachineOperand &Root,
+ unsigned DstElemWidth,
+ bool isReciprocal) const {
if (!Root.isReg())
return std::nullopt;
const MachineRegisterInfo &MRI =
Root.getParent()->getParent()->getParent()->getRegInfo();
- MachineInstr *Dup = getDefIgnoringCopies(Root.getReg(), MRI);
- if (Dup->getOpcode() != AArch64::G_DUP)
- return std::nullopt;
+ Register Reg = Root.getReg();
+ MachineInstr *Dup = getDefIgnoringCopies(Reg, MRI);
+
+ if (Dup && Dup->getOpcode() == AArch64::G_DUP)
+ Reg = Dup->getOperand(1).getReg();
+
std::optional<ValueAndVReg> CstVal =
- getAnyConstantVRegValWithLookThrough(Dup->getOperand(1).getReg(), MRI);
+ getAnyConstantVRegValWithLookThrough(Reg, MRI);
+
if (!CstVal)
return std::nullopt;
- unsigned RegWidth = MRI.getType(Root.getReg()).getScalarSizeInBits();
+ unsigned CstElemWidth = MRI.getType(Reg).getScalarSizeInBits();
APFloat FVal(0.0);
- switch (RegWidth) {
+ switch (CstElemWidth) {
case 16:
FVal = APFloat(APFloat::IEEEhalf(), CstVal->Value);
break;
@@ -7992,21 +8001,38 @@ AArch64InstructionSelector::selectCVTFixedPointVecBase(
return std::nullopt;
};
if (unsigned FBits =
- CheckFixedPointOperandConstant(FVal, RegWidth, isReciprocal))
+ CheckFixedPointOperandConstant(FVal, DstElemWidth, isReciprocal))
return {{[=](MachineInstrBuilder &MIB) { MIB.addImm(FBits); }}};
return std::nullopt;
}
+unsigned AArch64InstructionSelector::getFixedPointWidthFromOperand(
+ const MachineOperand &Root) const {
+ return Root.getParent()
+ ->getMF()
+ ->getRegInfo()
+ .getType(Root.getReg())
+ .getScalarSizeInBits();
+}
+
+template <unsigned Width>
+InstructionSelector::ComplexRendererFns
+AArch64InstructionSelector::selectCVTFixedPoint(MachineOperand &Root) const {
+ return selectCVTFixedPointBase(Root, Width, /*isReciprocal*/ false);
+}
+
InstructionSelector::ComplexRendererFns
AArch64InstructionSelector::selectCVTFixedPointVec(MachineOperand &Root) const {
- return selectCVTFixedPointVecBase(Root, /*isReciprocal*/ false);
+ return selectCVTFixedPointBase(Root, getFixedPointWidthFromOperand(Root),
+ /*isReciprocal*/ false);
}
InstructionSelector::ComplexRendererFns
AArch64InstructionSelector::selectCVTFixedPosRecipOperandVec(
MachineOperand &Root) const {
- return selectCVTFixedPointVecBase(Root, /*isReciprocal*/ true);
+ return selectCVTFixedPointBase(Root, getFixedPointWidthFromOperand(Root),
+ /*isReciprocal*/ true);
}
void AArch64InstructionSelector::renderFixedPointScalarXForm(
@@ -8016,26 +8042,33 @@ void AArch64InstructionSelector::renderFixedPointScalarXForm(
MIB.addImm(MI.getOperand(OpIdx).getImm());
}
-void AArch64InstructionSelector::renderFixedPointXForm(MachineInstrBuilder &MIB,
- const MachineInstr &MI,
- int OpIdx) const {
+void AArch64InstructionSelector::renderFixedPointImm(MachineInstrBuilder &MIB,
+ const MachineOperand &Root,
+ unsigned Width,
+ bool isReciprocal) const {
// FIXME: This is only needed to satisfy the type checking in tablegen, and
// should be able to reuse the Renderers already calculated by
- // selectCVTFixedPointVecBase.
+ // selectCVTFixedPointBase.
InstructionSelector::ComplexRendererFns Renderer =
- selectCVTFixedPointVecBase(MI.getOperand(OpIdx), /*isReciprocal*/ false);
+ selectCVTFixedPointBase(Root, Width, isReciprocal);
assert((Renderer && Renderer->size() == 1) &&
- "Expected selectCVTFixedPointVec to provide a function\n");
+ "Expected selectCVTFixedPointBase to provide a function\n");
(Renderer->front())(MIB);
}
+void AArch64InstructionSelector::renderFixedPointXForm(MachineInstrBuilder &MIB,
+ const MachineInstr &MI,
+ int OpIdx) const {
+ const MachineOperand &Root = MI.getOperand(OpIdx);
+ renderFixedPointImm(MIB, Root, getFixedPointWidthFromOperand(Root),
+ /*isReciprocal*/ false);
+}
+
void AArch64InstructionSelector::renderFixedPointRecipXForm(
MachineInstrBuilder &MIB, const MachineInstr &MI, int OpIdx) const {
- InstructionSelector::ComplexRendererFns Renderer =
- selectCVTFixedPointVecBase(MI.getOperand(OpIdx), /*isReciprocal*/ true);
- assert((Renderer && Renderer->size() == 1) &&
- "Expected selectCVTFixedPosRecipOperandVec to provide a function\n");
- (Renderer->front())(MIB);
+ const MachineOperand &Root = MI.getOperand(OpIdx);
+ renderFixedPointImm(MIB, Root, getFixedPointWidthFromOperand(Root),
+ /*isReciprocal*/ true);
}
void AArch64InstructionSelector::renderTruncImm(MachineInstrBuilder &MIB,
diff --git a/llvm/test/CodeGen/AArch64/fcvt-fixed.ll b/llvm/test/CodeGen/AArch64/fcvt-fixed.ll
index 7419d88ef6c8d..f42071126df1b 100644
--- a/llvm/test/CodeGen/AArch64/fcvt-fixed.ll
+++ b/llvm/test/CodeGen/AArch64/fcvt-fixed.ll
@@ -1,58 +1,36 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc -verify-machineinstrs < %s -mtriple=aarch64-none-linux-gnu | FileCheck %s --check-prefixes=CHECK,CHECK-SD,CHECK-NO16,CHECK-SD-NO16
-; RUN: llc -verify-machineinstrs < %s -mtriple=aarch64-none-linux-gnu -mattr=+fullfp16 | FileCheck %s --check-prefixes=CHECK,CHECK-SD,CHECK-FP16,CHECK-SD-FP16
-; RUN: llc -verify-machineinstrs < %s -mtriple=aarch64-none-linux-gnu -global-isel | FileCheck %s --check-prefixes=CHECK,CHECK-GI,CHECK-NO16,CHECK-GI-NO16
-; RUN: llc -verify-machineinstrs < %s -mtriple=aarch64-none-linux-gnu -mattr=+fullfp16 -global-isel | FileCheck %s --check-prefixes=CHECK,CHECK-GI,CHECK-FP16,CHECK-GI-FP16
+; RUN: llc -verify-machineinstrs < %s -mtriple=aarch64-none-linux-gnu | FileCheck %s --check-prefixes=CHECK,CHECK-NO16,CHECK-SD-NO16
+; RUN: llc -verify-machineinstrs < %s -mtriple=aarch64-none-linux-gnu -mattr=+fullfp16 | FileCheck %s --check-prefixes=CHECK,CHECK-FP16
+; RUN: llc -verify-machineinstrs < %s -mtriple=aarch64-none-linux-gnu -global-isel | FileCheck %s --check-prefixes=CHECK,CHECK-NO16,CHECK-GI-NO16
+; RUN: llc -verify-machineinstrs < %s -mtriple=aarch64-none-linux-gnu -mattr=+fullfp16 -global-isel | FileCheck %s --check-prefixes=CHECK,CHECK-FP16
; fptoui
define i32 @fcvtzs_f32_i32_7(float %flt) {
-; CHECK-SD-LABEL: fcvtzs_f32_i32_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs w0, s0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_f32_i32_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: movi v1.2s, #67, lsl #24
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzs w0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_f32_i32_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs w0, s0, #7
+; CHECK-NEXT: ret
%fix = fmul float %flt, 128.0
%cvt = fptosi float %fix to i32
ret i32 %cvt
}
define i32 @fcvtzs_f32_i32_32(float %flt) {
-; CHECK-SD-LABEL: fcvtzs_f32_i32_32:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs w0, s0, #32
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_f32_i32_32:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #1333788672 // =0x4f800000
-; CHECK-GI-NEXT: fmov s1, w8
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzs w0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_f32_i32_32:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs w0, s0, #32
+; CHECK-NEXT: ret
%fix = fmul float %flt, 4294967296.0
%cvt = fptosi float %fix to i32
ret i32 %cvt
}
define float @fcvtzs_f32_i32_7_fpr(float %flt) {
-; CHECK-SD-LABEL: fcvtzs_f32_i32_7_fpr:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs s0, s0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_f32_i32_7_fpr:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: movi v1.2s, #67, lsl #24
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzs s0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_f32_i32_7_fpr:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs s0, s0, #7
+; CHECK-NEXT: ret
%fix = fmul float %flt, 128.0
%cvt = fptosi float %fix to i32
%bc = bitcast i32 %cvt to float
@@ -60,18 +38,10 @@ define float @fcvtzs_f32_i32_7_fpr(float %flt) {
}
define float @fcvtzs_f32_i32_32_fpr(float %flt) {
-; CHECK-SD-LABEL: fcvtzs_f32_i32_32_fpr:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs s0, s0, #32
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_f32_i32_32_fpr:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #1333788672 // =0x4f800000
-; CHECK-GI-NEXT: fmov s1, w8
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzs s0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_f32_i32_32_fpr:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs s0, s0, #32
+; CHECK-NEXT: ret
%fix = fmul float %flt, 4294967296.0
%cvt = fptosi float %fix to i32
%bc = bitcast i32 %cvt to float
@@ -79,125 +49,70 @@ define float @fcvtzs_f32_i32_32_fpr(float %flt) {
}
define i64 @fcvtzs_f32_i64_7(float %flt) {
-; CHECK-SD-LABEL: fcvtzs_f32_i64_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs x0, s0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_f32_i64_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: movi v1.2s, #67, lsl #24
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzs x0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_f32_i64_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs x0, s0, #7
+; CHECK-NEXT: ret
%fix = fmul float %flt, 128.0
%cvt = fptosi float %fix to i64
ret i64 %cvt
}
define i64 @fcvtzs_f32_i64_64(float %flt) {
-; CHECK-SD-LABEL: fcvtzs_f32_i64_64:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs x0, s0, #64
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_f32_i64_64:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #1602224128 // =0x5f800000
-; CHECK-GI-NEXT: fmov s1, w8
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzs x0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_f32_i64_64:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs x0, s0, #64
+; CHECK-NEXT: ret
%fix = fmul float %flt, 18446744073709551616.0
%cvt = fptosi float %fix to i64
ret i64 %cvt
}
define i32 @fcvtzs_f64_i32_7(double %dbl) {
-; CHECK-SD-LABEL: fcvtzs_f64_i32_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs w0, d0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_f64_i32_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4638707616191610880 // =0x4060000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzs w0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_f64_i32_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs w0, d0, #7
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 128.0
%cvt = fptosi double %fix to i32
ret i32 %cvt
}
define i32 @fcvtzs_f64_i32_32(double %dbl) {
-; CHECK-SD-LABEL: fcvtzs_f64_i32_32:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs w0, d0, #32
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_f64_i32_32:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4751297606875873280 // =0x41f0000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzs w0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_f64_i32_32:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs w0, d0, #32
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 4294967296.0
%cvt = fptosi double %fix to i32
ret i32 %cvt
}
define i64 @fcvtzs_f64_i64_7(double %dbl) {
-; CHECK-SD-LABEL: fcvtzs_f64_i64_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs x0, d0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_f64_i64_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4638707616191610880 // =0x4060000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzs x0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_f64_i64_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs x0, d0, #7
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 128.0
%cvt = fptosi double %fix to i64
ret i64 %cvt
}
define i64 @fcvtzs_f64_i64_64(double %dbl) {
-; CHECK-SD-LABEL: fcvtzs_f64_i64_64:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs x0, d0, #64
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_f64_i64_64:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4895412794951729152 // =0x43f0000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzs x0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_f64_i64_64:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs x0, d0, #64
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 18446744073709551616.0
%cvt = fptosi double %fix to i64
ret i64 %cvt
}
define double @fcvtzs_f64_i64_7_fpr(double %dbl) {
-; CHECK-SD-LABEL: fcvtzs_f64_i64_7_fpr:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs d0, d0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_f64_i64_7_fpr:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4638707616191610880 // =0x4060000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzs d0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_f64_i64_7_fpr:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs d0, d0, #7
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 128.0
%cvt = fptosi double %fix to i64
%bc = bitcast i64 %cvt to double
@@ -205,18 +120,10 @@ define double @fcvtzs_f64_i64_7_fpr(double %dbl) {
}
define double @fcvtzs_f64_i64_64_fpr(double %dbl) {
-; CHECK-SD-LABEL: fcvtzs_f64_i64_64_fpr:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs d0, d0, #64
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_f64_i64_64_fpr:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4895412794951729152 // =0x43f0000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzs d0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_f64_i64_64_fpr:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs d0, d0, #64
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 18446744073709551616.0
%cvt = fptosi double %fix to i64
%bc = bitcast i64 %cvt to double
@@ -234,18 +141,10 @@ define i32 @fcvtzs_f16_i32_7(half %flt) {
; CHECK-NO16-NEXT: fcvtzs w0, s0
; CHECK-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-FP16-LABEL: fcvtzs_f16_i32_7:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI12_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI12_0]
-; CHECK-GI-FP16-NEXT: fmul h0, h0, h1
-; CHECK-GI-FP16-NEXT: fcvtzs w0, h0
-; CHECK-GI-FP16-NEXT: ret
+; CHECK-FP16-LABEL: fcvtzs_f16_i32_7:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: fcvtzs w0, h0, #7
+; CHECK-FP16-NEXT: ret
%fix = fmul half %flt, 128.0
%cvt = fptosi half %fix to i32
ret i32 %cvt
@@ -262,18 +161,10 @@ define i32 @fcvtzs_f16_i32_15(half %flt) {
; CHECK-NO16-NEXT: fcvtzs w0, s0
; CHECK-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-FP16-LABEL: fcvtzs_f16_i32_15:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI13_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI13_0]
-; CHECK-GI-FP16-NEXT: fmul h0, h0, h1
-; CHECK-GI-FP16-NEXT: fcvtzs w0, h0
-; CHECK-GI-FP16-NEXT: ret
+; CHECK-FP16-LABEL: fcvtzs_f16_i32_15:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: fcvtzs w0, h0, #15
+; CHECK-FP16-NEXT: ret
%fix = fmul half %flt, 32768.0
%cvt = fptosi half %fix to i32
ret i32 %cvt
@@ -290,18 +181,10 @@ define i64 @fcvtzs_f16_i64_7(half %flt) {
; CHECK-NO16-NEXT: fcvtzs x0, s0
; CHECK-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-FP16-LABEL: fcvtzs_f16_i64_7:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI14_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI14_0]
-; CHECK-GI-FP16-NEXT: fmul h0, h0, h1
-; CHECK-GI-FP16-NEXT: fcvtzs x0, h0
-; CHECK-GI-FP16-NEXT: ret
+; CHECK-FP16-LABEL: fcvtzs_f16_i64_7:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: fcvtzs x0, h0, #7
+; CHECK-FP16-NEXT: ret
%fix = fmul half %flt, 128.0
%cvt = fptosi half %fix to i64
ret i64 %cvt
@@ -318,18 +201,10 @@ define i64 @fcvtzs_f16_i64_15(half %flt) {
; CHECK-NO16-NEXT: fcvtzs x0, s0
; CHECK-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-FP16-LABEL: fcvtzs_f16_i64_15:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI15_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI15_0]
-; CHECK-GI-FP16-NEXT: fmul h0, h0, h1
-; CHECK-GI-FP16-NEXT: fcvtzs x0, h0
-; CHECK-GI-FP16-NEXT: ret
+; CHECK-FP16-LABEL: fcvtzs_f16_i64_15:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: fcvtzs x0, h0, #15
+; CHECK-FP16-NEXT: ret
%fix = fmul half %flt, 32768.0
%cvt = fptosi half %fix to i64
ret i64 %cvt
@@ -338,52 +213,30 @@ define i64 @fcvtzs_f16_i64_15(half %flt) {
; fptoui
define i32 @fcvtzu_f32_i32_7(float %flt) {
-; CHECK-SD-LABEL: fcvtzu_f32_i32_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu w0, s0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzu_f32_i32_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: movi v1.2s, #67, lsl #24
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzu w0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzu_f32_i32_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu w0, s0, #7
+; CHECK-NEXT: ret
%fix = fmul float %flt, 128.0
%cvt = fptoui float %fix to i32
ret i32 %cvt
}
define i32 @fcvtzu_f32_i32_32(float %flt) {
-; CHECK-SD-LABEL: fcvtzu_f32_i32_32:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu w0, s0, #32
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzu_f32_i32_32:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #1333788672 // =0x4f800000
-; CHECK-GI-NEXT: fmov s1, w8
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzu w0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzu_f32_i32_32:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu w0, s0, #32
+; CHECK-NEXT: ret
%fix = fmul float %flt, 4294967296.0
%cvt = fptoui float %fix to i32
ret i32 %cvt
}
define float @fcvtzu_f32_i32_7_fpr(float %flt) {
-; CHECK-SD-LABEL: fcvtzu_f32_i32_7_fpr:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu s0, s0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzu_f32_i32_7_fpr:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: movi v1.2s, #67, lsl #24
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzu s0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzu_f32_i32_7_fpr:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu s0, s0, #7
+; CHECK-NEXT: ret
%fix = fmul float %flt, 128.0
%cvt = fptoui float %fix to i32
%bc = bitcast i32 %cvt to float
@@ -391,18 +244,10 @@ define float @fcvtzu_f32_i32_7_fpr(float %flt) {
}
define float @fcvtzu_f32_i32_32_fpr(float %flt) {
-; CHECK-SD-LABEL: fcvtzu_f32_i32_32_fpr:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu s0, s0, #32
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzu_f32_i32_32_fpr:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #1333788672 // =0x4f800000
-; CHECK-GI-NEXT: fmov s1, w8
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzu s0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzu_f32_i32_32_fpr:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu s0, s0, #32
+; CHECK-NEXT: ret
%fix = fmul float %flt, 4294967296.0
%cvt = fptoui float %fix to i32
%bc = bitcast i32 %cvt to float
@@ -410,125 +255,70 @@ define float @fcvtzu_f32_i32_32_fpr(float %flt) {
}
define i64 @fcvtzu_f32_i64_7(float %flt) {
-; CHECK-SD-LABEL: fcvtzu_f32_i64_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu x0, s0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzu_f32_i64_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: movi v1.2s, #67, lsl #24
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzu x0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzu_f32_i64_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu x0, s0, #7
+; CHECK-NEXT: ret
%fix = fmul float %flt, 128.0
%cvt = fptoui float %fix to i64
ret i64 %cvt
}
define i64 @fcvtzu_f32_i64_64(float %flt) {
-; CHECK-SD-LABEL: fcvtzu_f32_i64_64:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu x0, s0, #64
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzu_f32_i64_64:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #1602224128 // =0x5f800000
-; CHECK-GI-NEXT: fmov s1, w8
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzu x0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzu_f32_i64_64:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu x0, s0, #64
+; CHECK-NEXT: ret
%fix = fmul float %flt, 18446744073709551616.0
%cvt = fptoui float %fix to i64
ret i64 %cvt
}
define i32 @fcvtzu_f64_i32_7(double %dbl) {
-; CHECK-SD-LABEL: fcvtzu_f64_i32_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu w0, d0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzu_f64_i32_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4638707616191610880 // =0x4060000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzu w0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzu_f64_i32_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu w0, d0, #7
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 128.0
%cvt = fptoui double %fix to i32
ret i32 %cvt
}
define i32 @fcvtzu_f64_i32_32(double %dbl) {
-; CHECK-SD-LABEL: fcvtzu_f64_i32_32:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu w0, d0, #32
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzu_f64_i32_32:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4751297606875873280 // =0x41f0000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzu w0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzu_f64_i32_32:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu w0, d0, #32
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 4294967296.0
%cvt = fptoui double %fix to i32
ret i32 %cvt
}
define i64 @fcvtzu_f64_i64_7(double %dbl) {
-; CHECK-SD-LABEL: fcvtzu_f64_i64_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu x0, d0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzu_f64_i64_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4638707616191610880 // =0x4060000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzu x0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzu_f64_i64_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu x0, d0, #7
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 128.0
%cvt = fptoui double %fix to i64
ret i64 %cvt
}
define i64 @fcvtzu_f64_i64_64(double %dbl) {
-; CHECK-SD-LABEL: fcvtzu_f64_i64_64:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu x0, d0, #64
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzu_f64_i64_64:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4895412794951729152 // =0x43f0000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzu x0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzu_f64_i64_64:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu x0, d0, #64
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 18446744073709551616.0
%cvt = fptoui double %fix to i64
ret i64 %cvt
}
define double @fcvtzu_f64_i64_fpr(double %dbl) {
-; CHECK-SD-LABEL: fcvtzu_f64_i64_fpr:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu d0, d0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzu_f64_i64_fpr:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4638707616191610880 // =0x4060000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzu d0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzu_f64_i64_fpr:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu d0, d0, #7
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 128.0
%cvt = fptoui double %fix to i64
%bc = bitcast i64 %cvt to double
@@ -546,18 +336,10 @@ define i32 @fcvtzu_f16_i32_7(half %flt) {
; CHECK-NO16-NEXT: fcvtzu w0, s0
; CHECK-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-FP16-LABEL: fcvtzu_f16_i32_7:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI27_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI27_0]
-; CHECK-GI-FP16-NEXT: fmul h0, h0, h1
-; CHECK-GI-FP16-NEXT: fcvtzu w0, h0
-; CHECK-GI-FP16-NEXT: ret
+; CHECK-FP16-LABEL: fcvtzu_f16_i32_7:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: fcvtzu w0, h0, #7
+; CHECK-FP16-NEXT: ret
%fix = fmul half %flt, 128.0
%cvt = fptoui half %fix to i32
ret i32 %cvt
@@ -574,18 +356,10 @@ define i32 @fcvtzu_f16_i32_15(half %flt) {
; CHECK-NO16-NEXT: fcvtzu w0, s0
; CHECK-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-FP16-LABEL: fcvtzu_f16_i32_15:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI28_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI28_0]
-; CHECK-GI-FP16-NEXT: fmul h0, h0, h1
-; CHECK-GI-FP16-NEXT: fcvtzu w0, h0
-; CHECK-GI-FP16-NEXT: ret
+; CHECK-FP16-LABEL: fcvtzu_f16_i32_15:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: fcvtzu w0, h0, #15
+; CHECK-FP16-NEXT: ret
%fix = fmul half %flt, 32768.0
%cvt = fptoui half %fix to i32
ret i32 %cvt
@@ -602,18 +376,10 @@ define i64 @fcvtzu_f16_i64_7(half %flt) {
; CHECK-NO16-NEXT: fcvtzu x0, s0
; CHECK-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-FP16-LABEL: fcvtzu_f16_i64_7:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI29_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI29_0]
-; CHECK-GI-FP16-NEXT: fmul h0, h0, h1
-; CHECK-GI-FP16-NEXT: fcvtzu x0, h0
-; CHECK-GI-FP16-NEXT: ret
+; CHECK-FP16-LABEL: fcvtzu_f16_i64_7:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: fcvtzu x0, h0, #7
+; CHECK-FP16-NEXT: ret
%fix = fmul half %flt, 128.0
%cvt = fptoui half %fix to i64
ret i64 %cvt
@@ -630,18 +396,10 @@ define i64 @fcvtzu_f16_i64_15(half %flt) {
; CHECK-NO16-NEXT: fcvtzu x0, s0
; CHECK-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-FP16-LABEL: fcvtzu_f16_i64_15:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI30_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI30_0]
-; CHECK-GI-FP16-NEXT: fmul h0, h0, h1
-; CHECK-GI-FP16-NEXT: fcvtzu x0, h0
-; CHECK-GI-FP16-NEXT: ret
+; CHECK-FP16-LABEL: fcvtzu_f16_i64_15:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: fcvtzu x0, h0, #15
+; CHECK-FP16-NEXT: ret
%fix = fmul half %flt, 32768.0
%cvt = fptoui half %fix to i64
ret i64 %cvt
@@ -650,142 +408,80 @@ define i64 @fcvtzu_f16_i64_15(half %flt) {
; sitofp
define float @scvtf_f32_i32_7(i32 %int) {
-; CHECK-SD-LABEL: scvtf_f32_i32_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: scvtf s0, w0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: scvtf_f32_i32_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: movi v0.2s, #67, lsl #24
-; CHECK-GI-NEXT: scvtf s1, w0
-; CHECK-GI-NEXT: fdiv s0, s1, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: scvtf_f32_i32_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: scvtf s0, w0, #7
+; CHECK-NEXT: ret
%cvt = sitofp i32 %int to float
%fix = fdiv float %cvt, 128.0
ret float %fix
}
define float @scvtf_f32_i32_32(i32 %int) {
-; CHECK-SD-LABEL: scvtf_f32_i32_32:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: scvtf s0, w0, #32
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: scvtf_f32_i32_32:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: scvtf s0, w0
-; CHECK-GI-NEXT: mov w8, #1333788672 // =0x4f800000
-; CHECK-GI-NEXT: fmov s1, w8
-; CHECK-GI-NEXT: fdiv s0, s0, s1
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: scvtf_f32_i32_32:
+; CHECK: // %bb.0:
+; CHECK-NEXT: scvtf s0, w0, #32
+; CHECK-NEXT: ret
%cvt = sitofp i32 %int to float
%fix = fdiv float %cvt, 4294967296.0
ret float %fix
}
define float @scvtf_f32_i64_7(i64 %long) {
-; CHECK-SD-LABEL: scvtf_f32_i64_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: scvtf s0, x0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: scvtf_f32_i64_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: movi v0.2s, #67, lsl #24
-; CHECK-GI-NEXT: scvtf s1, x0
-; CHECK-GI-NEXT: fdiv s0, s1, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: scvtf_f32_i64_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: scvtf s0, x0, #7
+; CHECK-NEXT: ret
%cvt = sitofp i64 %long to float
%fix = fdiv float %cvt, 128.0
ret float %fix
}
define float @scvtf_f32_i64_64(i64 %long) {
-; CHECK-SD-LABEL: scvtf_f32_i64_64:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: scvtf s0, x0, #64
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: scvtf_f32_i64_64:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: scvtf s0, x0
-; CHECK-GI-NEXT: mov w8, #1602224128 // =0x5f800000
-; CHECK-GI-NEXT: fmov s1, w8
-; CHECK-GI-NEXT: fdiv s0, s0, s1
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: scvtf_f32_i64_64:
+; CHECK: // %bb.0:
+; CHECK-NEXT: scvtf s0, x0, #64
+; CHECK-NEXT: ret
%cvt = sitofp i64 %long to float
%fix = fdiv float %cvt, 18446744073709551616.0
ret float %fix
}
define double @scvtf_f64_i32_7(i32 %int) {
-; CHECK-SD-LABEL: scvtf_f64_i32_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: scvtf d0, w0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: scvtf_f64_i32_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: scvtf d0, w0
-; CHECK-GI-NEXT: mov x8, #4638707616191610880 // =0x4060000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fdiv d0, d0, d1
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: scvtf_f64_i32_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: scvtf d0, w0, #7
+; CHECK-NEXT: ret
%cvt = sitofp i32 %int to double
%fix = fdiv double %cvt, 128.0
ret double %fix
}
define double @scvtf_f64_i32_32(i32 %int) {
-; CHECK-SD-LABEL: scvtf_f64_i32_32:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: scvtf d0, w0, #32
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: scvtf_f64_i32_32:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: scvtf d0, w0
-; CHECK-GI-NEXT: mov x8, #4751297606875873280 // =0x41f0000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fdiv d0, d0, d1
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: scvtf_f64_i32_32:
+; CHECK: // %bb.0:
+; CHECK-NEXT: scvtf d0, w0, #32
+; CHECK-NEXT: ret
%cvt = sitofp i32 %int to double
%fix = fdiv double %cvt, 4294967296.0
ret double %fix
}
define double @scvtf_f64_i64_7(i64 %long) {
-; CHECK-SD-LABEL: scvtf_f64_i64_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: scvtf d0, x0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: scvtf_f64_i64_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: scvtf d0, x0
-; CHECK-GI-NEXT: mov x8, #4638707616191610880 // =0x4060000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fdiv d0, d0, d1
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: scvtf_f64_i64_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: scvtf d0, x0, #7
+; CHECK-NEXT: ret
%cvt = sitofp i64 %long to double
%fix = fdiv double %cvt, 128.0
ret double %fix
}
define double @scvtf_f64_i64_64(i64 %long) {
-; CHECK-SD-LABEL: scvtf_f64_i64_64:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: scvtf d0, x0, #64
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: scvtf_f64_i64_64:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: scvtf d0, x0
-; CHECK-GI-NEXT: mov x8, #4895412794951729152 // =0x43f0000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fdiv d0, d0, d1
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: scvtf_f64_i64_64:
+; CHECK: // %bb.0:
+; CHECK-NEXT: scvtf d0, x0, #64
+; CHECK-NEXT: ret
%cvt = sitofp i64 %long to double
%fix = fdiv double %cvt, 18446744073709551616.0
ret double %fix
@@ -802,10 +498,10 @@ define half @scvtf_f16_i32_7(i32 %int) {
; CHECK-SD-NO16-NEXT: fcvt h0, s0
; CHECK-SD-NO16-NEXT: ret
;
-; CHECK-SD-FP16-LABEL: scvtf_f16_i32_7:
-; CHECK-SD-FP16: // %bb.0:
-; CHECK-SD-FP16-NEXT: scvtf h0, w0, #7
-; CHECK-SD-FP16-NEXT: ret
+; CHECK-FP16-LABEL: scvtf_f16_i32_7:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: scvtf h0, w0, #7
+; CHECK-FP16-NEXT: ret
;
; CHECK-GI-NO16-LABEL: scvtf_f16_i32_7:
; CHECK-GI-NO16: // %bb.0:
@@ -816,14 +512,6 @@ define half @scvtf_f16_i32_7(i32 %int) {
; CHECK-GI-NO16-NEXT: fdiv s0, s1, s0
; CHECK-GI-NO16-NEXT: fcvt h0, s0
; CHECK-GI-NO16-NEXT: ret
-;
-; CHECK-GI-FP16-LABEL: scvtf_f16_i32_7:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: scvtf h0, w0
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI39_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI39_0]
-; CHECK-GI-FP16-NEXT: fdiv h0, h0, h1
-; CHECK-GI-FP16-NEXT: ret
%cvt = sitofp i32 %int to half
%fix = fdiv half %cvt, 128.0
ret half %fix
@@ -840,10 +528,10 @@ define half @scvtf_f16_i32_15(i32 %int) {
; CHECK-SD-NO16-NEXT: fcvt h0, s0
; CHECK-SD-NO16-NEXT: ret
;
-; CHECK-SD-FP16-LABEL: scvtf_f16_i32_15:
-; CHECK-SD-FP16: // %bb.0:
-; CHECK-SD-FP16-NEXT: scvtf h0, w0, #15
-; CHECK-SD-FP16-NEXT: ret
+; CHECK-FP16-LABEL: scvtf_f16_i32_15:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: scvtf h0, w0, #15
+; CHECK-FP16-NEXT: ret
;
; CHECK-GI-NO16-LABEL: scvtf_f16_i32_15:
; CHECK-GI-NO16: // %bb.0:
@@ -854,14 +542,6 @@ define half @scvtf_f16_i32_15(i32 %int) {
; CHECK-GI-NO16-NEXT: fdiv s0, s1, s0
; CHECK-GI-NO16-NEXT: fcvt h0, s0
; CHECK-GI-NO16-NEXT: ret
-;
-; CHECK-GI-FP16-LABEL: scvtf_f16_i32_15:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: scvtf h0, w0
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI40_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI40_0]
-; CHECK-GI-FP16-NEXT: fdiv h0, h0, h1
-; CHECK-GI-FP16-NEXT: ret
%cvt = sitofp i32 %int to half
%fix = fdiv half %cvt, 32768.0
ret half %fix
@@ -878,10 +558,10 @@ define half @scvtf_f16_i64_7(i64 %long) {
; CHECK-SD-NO16-NEXT: fcvt h0, s0
; CHECK-SD-NO16-NEXT: ret
;
-; CHECK-SD-FP16-LABEL: scvtf_f16_i64_7:
-; CHECK-SD-FP16: // %bb.0:
-; CHECK-SD-FP16-NEXT: scvtf h0, x0, #7
-; CHECK-SD-FP16-NEXT: ret
+; CHECK-FP16-LABEL: scvtf_f16_i64_7:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: scvtf h0, x0, #7
+; CHECK-FP16-NEXT: ret
;
; CHECK-GI-NO16-LABEL: scvtf_f16_i64_7:
; CHECK-GI-NO16: // %bb.0:
@@ -892,14 +572,6 @@ define half @scvtf_f16_i64_7(i64 %long) {
; CHECK-GI-NO16-NEXT: fdiv s0, s1, s0
; CHECK-GI-NO16-NEXT: fcvt h0, s0
; CHECK-GI-NO16-NEXT: ret
-;
-; CHECK-GI-FP16-LABEL: scvtf_f16_i64_7:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: scvtf h0, x0
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI41_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI41_0]
-; CHECK-GI-FP16-NEXT: fdiv h0, h0, h1
-; CHECK-GI-FP16-NEXT: ret
%cvt = sitofp i64 %long to half
%fix = fdiv half %cvt, 128.0
ret half %fix
@@ -916,10 +588,10 @@ define half @scvtf_f16_i64_15(i64 %long) {
; CHECK-SD-NO16-NEXT: fcvt h0, s0
; CHECK-SD-NO16-NEXT: ret
;
-; CHECK-SD-FP16-LABEL: scvtf_f16_i64_15:
-; CHECK-SD-FP16: // %bb.0:
-; CHECK-SD-FP16-NEXT: scvtf h0, x0, #15
-; CHECK-SD-FP16-NEXT: ret
+; CHECK-FP16-LABEL: scvtf_f16_i64_15:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: scvtf h0, x0, #15
+; CHECK-FP16-NEXT: ret
;
; CHECK-GI-NO16-LABEL: scvtf_f16_i64_15:
; CHECK-GI-NO16: // %bb.0:
@@ -930,14 +602,6 @@ define half @scvtf_f16_i64_15(i64 %long) {
; CHECK-GI-NO16-NEXT: fdiv s0, s1, s0
; CHECK-GI-NO16-NEXT: fcvt h0, s0
; CHECK-GI-NO16-NEXT: ret
-;
-; CHECK-GI-FP16-LABEL: scvtf_f16_i64_15:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: scvtf h0, x0
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI42_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI42_0]
-; CHECK-GI-FP16-NEXT: fdiv h0, h0, h1
-; CHECK-GI-FP16-NEXT: ret
%cvt = sitofp i64 %long to half
%fix = fdiv half %cvt, 32768.0
ret half %fix
@@ -946,142 +610,80 @@ define half @scvtf_f16_i64_15(i64 %long) {
; uitofp
define float @ucvtf_f32_i32_7(i32 %int) {
-; CHECK-SD-LABEL: ucvtf_f32_i32_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: ucvtf s0, w0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: ucvtf_f32_i32_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: movi v0.2s, #67, lsl #24
-; CHECK-GI-NEXT: ucvtf s1, w0
-; CHECK-GI-NEXT: fdiv s0, s1, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: ucvtf_f32_i32_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: ucvtf s0, w0, #7
+; CHECK-NEXT: ret
%cvt = uitofp i32 %int to float
%fix = fdiv float %cvt, 128.0
ret float %fix
}
define float @ucvtf_f32_i32_32(i32 %int) {
-; CHECK-SD-LABEL: ucvtf_f32_i32_32:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: ucvtf s0, w0, #32
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: ucvtf_f32_i32_32:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: ucvtf s0, w0
-; CHECK-GI-NEXT: mov w8, #1333788672 // =0x4f800000
-; CHECK-GI-NEXT: fmov s1, w8
-; CHECK-GI-NEXT: fdiv s0, s0, s1
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: ucvtf_f32_i32_32:
+; CHECK: // %bb.0:
+; CHECK-NEXT: ucvtf s0, w0, #32
+; CHECK-NEXT: ret
%cvt = uitofp i32 %int to float
%fix = fdiv float %cvt, 4294967296.0
ret float %fix
}
define float @ucvtf_f32_i64_7(i64 %long) {
-; CHECK-SD-LABEL: ucvtf_f32_i64_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: ucvtf s0, x0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: ucvtf_f32_i64_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: movi v0.2s, #67, lsl #24
-; CHECK-GI-NEXT: ucvtf s1, x0
-; CHECK-GI-NEXT: fdiv s0, s1, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: ucvtf_f32_i64_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: ucvtf s0, x0, #7
+; CHECK-NEXT: ret
%cvt = uitofp i64 %long to float
%fix = fdiv float %cvt, 128.0
ret float %fix
}
define float @ucvtf_f32_i64_64(i64 %long) {
-; CHECK-SD-LABEL: ucvtf_f32_i64_64:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: ucvtf s0, x0, #64
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: ucvtf_f32_i64_64:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: ucvtf s0, x0
-; CHECK-GI-NEXT: mov w8, #1602224128 // =0x5f800000
-; CHECK-GI-NEXT: fmov s1, w8
-; CHECK-GI-NEXT: fdiv s0, s0, s1
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: ucvtf_f32_i64_64:
+; CHECK: // %bb.0:
+; CHECK-NEXT: ucvtf s0, x0, #64
+; CHECK-NEXT: ret
%cvt = uitofp i64 %long to float
%fix = fdiv float %cvt, 18446744073709551616.0
ret float %fix
}
define double @ucvtf_f64_i32_7(i32 %int) {
-; CHECK-SD-LABEL: ucvtf_f64_i32_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: ucvtf d0, w0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: ucvtf_f64_i32_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: ucvtf d0, w0
-; CHECK-GI-NEXT: mov x8, #4638707616191610880 // =0x4060000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fdiv d0, d0, d1
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: ucvtf_f64_i32_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: ucvtf d0, w0, #7
+; CHECK-NEXT: ret
%cvt = uitofp i32 %int to double
%fix = fdiv double %cvt, 128.0
ret double %fix
}
define double @ucvtf_f64_i32_32(i32 %int) {
-; CHECK-SD-LABEL: ucvtf_f64_i32_32:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: ucvtf d0, w0, #32
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: ucvtf_f64_i32_32:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: ucvtf d0, w0
-; CHECK-GI-NEXT: mov x8, #4751297606875873280 // =0x41f0000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fdiv d0, d0, d1
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: ucvtf_f64_i32_32:
+; CHECK: // %bb.0:
+; CHECK-NEXT: ucvtf d0, w0, #32
+; CHECK-NEXT: ret
%cvt = uitofp i32 %int to double
%fix = fdiv double %cvt, 4294967296.0
ret double %fix
}
define double @ucvtf_f64_i64_7(i64 %long) {
-; CHECK-SD-LABEL: ucvtf_f64_i64_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: ucvtf d0, x0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: ucvtf_f64_i64_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: ucvtf d0, x0
-; CHECK-GI-NEXT: mov x8, #4638707616191610880 // =0x4060000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fdiv d0, d0, d1
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: ucvtf_f64_i64_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: ucvtf d0, x0, #7
+; CHECK-NEXT: ret
%cvt = uitofp i64 %long to double
%fix = fdiv double %cvt, 128.0
ret double %fix
}
define double @ucvtf_f64_i64_64(i64 %long) {
-; CHECK-SD-LABEL: ucvtf_f64_i64_64:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: ucvtf d0, x0, #64
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: ucvtf_f64_i64_64:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: ucvtf d0, x0
-; CHECK-GI-NEXT: mov x8, #4895412794951729152 // =0x43f0000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fdiv d0, d0, d1
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: ucvtf_f64_i64_64:
+; CHECK: // %bb.0:
+; CHECK-NEXT: ucvtf d0, x0, #64
+; CHECK-NEXT: ret
%cvt = uitofp i64 %long to double
%fix = fdiv double %cvt, 18446744073709551616.0
ret double %fix
@@ -1098,10 +700,10 @@ define half @ucvtf_f16_i32_7(i32 %int) {
; CHECK-SD-NO16-NEXT: fcvt h0, s0
; CHECK-SD-NO16-NEXT: ret
;
-; CHECK-SD-FP16-LABEL: ucvtf_f16_i32_7:
-; CHECK-SD-FP16: // %bb.0:
-; CHECK-SD-FP16-NEXT: ucvtf h0, w0, #7
-; CHECK-SD-FP16-NEXT: ret
+; CHECK-FP16-LABEL: ucvtf_f16_i32_7:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: ucvtf h0, w0, #7
+; CHECK-FP16-NEXT: ret
;
; CHECK-GI-NO16-LABEL: ucvtf_f16_i32_7:
; CHECK-GI-NO16: // %bb.0:
@@ -1112,14 +714,6 @@ define half @ucvtf_f16_i32_7(i32 %int) {
; CHECK-GI-NO16-NEXT: fdiv s0, s1, s0
; CHECK-GI-NO16-NEXT: fcvt h0, s0
; CHECK-GI-NO16-NEXT: ret
-;
-; CHECK-GI-FP16-LABEL: ucvtf_f16_i32_7:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: ucvtf h0, w0
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI51_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI51_0]
-; CHECK-GI-FP16-NEXT: fdiv h0, h0, h1
-; CHECK-GI-FP16-NEXT: ret
%cvt = uitofp i32 %int to half
%fix = fdiv half %cvt, 128.0
ret half %fix
@@ -1136,10 +730,10 @@ define half @ucvtf_f16_i32_15(i32 %int) {
; CHECK-SD-NO16-NEXT: fcvt h0, s0
; CHECK-SD-NO16-NEXT: ret
;
-; CHECK-SD-FP16-LABEL: ucvtf_f16_i32_15:
-; CHECK-SD-FP16: // %bb.0:
-; CHECK-SD-FP16-NEXT: ucvtf h0, w0, #15
-; CHECK-SD-FP16-NEXT: ret
+; CHECK-FP16-LABEL: ucvtf_f16_i32_15:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: ucvtf h0, w0, #15
+; CHECK-FP16-NEXT: ret
;
; CHECK-GI-NO16-LABEL: ucvtf_f16_i32_15:
; CHECK-GI-NO16: // %bb.0:
@@ -1150,14 +744,6 @@ define half @ucvtf_f16_i32_15(i32 %int) {
; CHECK-GI-NO16-NEXT: fdiv s0, s1, s0
; CHECK-GI-NO16-NEXT: fcvt h0, s0
; CHECK-GI-NO16-NEXT: ret
-;
-; CHECK-GI-FP16-LABEL: ucvtf_f16_i32_15:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: ucvtf h0, w0
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI52_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI52_0]
-; CHECK-GI-FP16-NEXT: fdiv h0, h0, h1
-; CHECK-GI-FP16-NEXT: ret
%cvt = uitofp i32 %int to half
%fix = fdiv half %cvt, 32768.0
ret half %fix
@@ -1174,10 +760,10 @@ define half @ucvtf_f16_i64_7(i64 %long) {
; CHECK-SD-NO16-NEXT: fcvt h0, s0
; CHECK-SD-NO16-NEXT: ret
;
-; CHECK-SD-FP16-LABEL: ucvtf_f16_i64_7:
-; CHECK-SD-FP16: // %bb.0:
-; CHECK-SD-FP16-NEXT: ucvtf h0, x0, #7
-; CHECK-SD-FP16-NEXT: ret
+; CHECK-FP16-LABEL: ucvtf_f16_i64_7:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: ucvtf h0, x0, #7
+; CHECK-FP16-NEXT: ret
;
; CHECK-GI-NO16-LABEL: ucvtf_f16_i64_7:
; CHECK-GI-NO16: // %bb.0:
@@ -1188,14 +774,6 @@ define half @ucvtf_f16_i64_7(i64 %long) {
; CHECK-GI-NO16-NEXT: fdiv s0, s1, s0
; CHECK-GI-NO16-NEXT: fcvt h0, s0
; CHECK-GI-NO16-NEXT: ret
-;
-; CHECK-GI-FP16-LABEL: ucvtf_f16_i64_7:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: ucvtf h0, x0
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI53_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI53_0]
-; CHECK-GI-FP16-NEXT: fdiv h0, h0, h1
-; CHECK-GI-FP16-NEXT: ret
%cvt = uitofp i64 %long to half
%fix = fdiv half %cvt, 128.0
ret half %fix
@@ -1212,10 +790,10 @@ define half @ucvtf_f16_i64_15(i64 %long) {
; CHECK-SD-NO16-NEXT: fcvt h0, s0
; CHECK-SD-NO16-NEXT: ret
;
-; CHECK-SD-FP16-LABEL: ucvtf_f16_i64_15:
-; CHECK-SD-FP16: // %bb.0:
-; CHECK-SD-FP16-NEXT: ucvtf h0, x0, #15
-; CHECK-SD-FP16-NEXT: ret
+; CHECK-FP16-LABEL: ucvtf_f16_i64_15:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: ucvtf h0, x0, #15
+; CHECK-FP16-NEXT: ret
;
; CHECK-GI-NO16-LABEL: ucvtf_f16_i64_15:
; CHECK-GI-NO16: // %bb.0:
@@ -1226,14 +804,6 @@ define half @ucvtf_f16_i64_15(i64 %long) {
; CHECK-GI-NO16-NEXT: fdiv s0, s1, s0
; CHECK-GI-NO16-NEXT: fcvt h0, s0
; CHECK-GI-NO16-NEXT: ret
-;
-; CHECK-GI-FP16-LABEL: ucvtf_f16_i64_15:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: ucvtf h0, x0
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI54_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI54_0]
-; CHECK-GI-FP16-NEXT: fdiv h0, h0, h1
-; CHECK-GI-FP16-NEXT: ret
%cvt = uitofp i64 %long to half
%fix = fdiv half %cvt, 32768.0
ret half %fix
@@ -1250,52 +820,30 @@ declare i32 @llvm.fptosi.sat.i32.f16(half)
declare i64 @llvm.fptosi.sat.i64.f16(half)
define i32 @fcvtzs_sat_f32_i32_7(float %flt) {
-; CHECK-SD-LABEL: fcvtzs_sat_f32_i32_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs w0, s0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_sat_f32_i32_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: movi v1.2s, #67, lsl #24
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzs w0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_sat_f32_i32_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs w0, s0, #7
+; CHECK-NEXT: ret
%fix = fmul float %flt, 128.0
%cvt = call i32 @llvm.fptosi.sat.i32.f32(float %fix)
ret i32 %cvt
}
define i32 @fcvtzs_sat_f32_i32_32(float %flt) {
-; CHECK-SD-LABEL: fcvtzs_sat_f32_i32_32:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs w0, s0, #32
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_sat_f32_i32_32:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #1333788672 // =0x4f800000
-; CHECK-GI-NEXT: fmov s1, w8
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzs w0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_sat_f32_i32_32:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs w0, s0, #32
+; CHECK-NEXT: ret
%fix = fmul float %flt, 4294967296.0
%cvt = call i32 @llvm.fptosi.sat.i32.f32(float %fix)
ret i32 %cvt
}
define float @fcvtzs_sat_f32_i32_7_fpr(float %flt) {
-; CHECK-SD-LABEL: fcvtzs_sat_f32_i32_7_fpr:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs s0, s0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_sat_f32_i32_7_fpr:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: movi v1.2s, #67, lsl #24
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzs s0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_sat_f32_i32_7_fpr:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs s0, s0, #7
+; CHECK-NEXT: ret
%fix = fmul float %flt, 128.0
%cvt = call i32 @llvm.fptosi.sat.i32.f32(float %fix)
%bc = bitcast i32 %cvt to float
@@ -1303,18 +851,10 @@ define float @fcvtzs_sat_f32_i32_7_fpr(float %flt) {
}
define float @fcvtzs_sat_f32_i32_32_fpr(float %flt) {
-; CHECK-SD-LABEL: fcvtzs_sat_f32_i32_32_fpr:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs s0, s0, #32
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_sat_f32_i32_32_fpr:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #1333788672 // =0x4f800000
-; CHECK-GI-NEXT: fmov s1, w8
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzs s0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_sat_f32_i32_32_fpr:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs s0, s0, #32
+; CHECK-NEXT: ret
%fix = fmul float %flt, 4294967296.0
%cvt = call i32 @llvm.fptosi.sat.i32.f32(float %fix)
%bc = bitcast i32 %cvt to float
@@ -1322,108 +862,60 @@ define float @fcvtzs_sat_f32_i32_32_fpr(float %flt) {
}
define i64 @fcvtzs_sat_f32_i64_64(float %flt) {
-; CHECK-SD-LABEL: fcvtzs_sat_f32_i64_64:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs x0, s0, #64
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_sat_f32_i64_64:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #1602224128 // =0x5f800000
-; CHECK-GI-NEXT: fmov s1, w8
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzs x0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_sat_f32_i64_64:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs x0, s0, #64
+; CHECK-NEXT: ret
%fix = fmul float %flt, 18446744073709551616.0
%cvt = call i64 @llvm.fptosi.sat.i64.f32(float %fix)
ret i64 %cvt
}
define i32 @fcvtzs_sat_f64_i32_7(double %dbl) {
-; CHECK-SD-LABEL: fcvtzs_sat_f64_i32_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs w0, d0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_sat_f64_i32_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4638707616191610880 // =0x4060000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzs w0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_sat_f64_i32_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs w0, d0, #7
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 128.0
%cvt = call i32 @llvm.fptosi.sat.i32.f64(double %fix)
ret i32 %cvt
}
define i32 @fcvtzs_sat_f64_i32_32(double %dbl) {
-; CHECK-SD-LABEL: fcvtzs_sat_f64_i32_32:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs w0, d0, #32
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_sat_f64_i32_32:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4751297606875873280 // =0x41f0000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzs w0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_sat_f64_i32_32:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs w0, d0, #32
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 4294967296.0
%cvt = call i32 @llvm.fptosi.sat.i32.f64(double %fix)
ret i32 %cvt
}
define i64 @fcvtzs_sat_f64_i64_7(double %dbl) {
-; CHECK-SD-LABEL: fcvtzs_sat_f64_i64_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs x0, d0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_sat_f64_i64_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4638707616191610880 // =0x4060000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzs x0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_sat_f64_i64_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs x0, d0, #7
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 128.0
%cvt = call i64 @llvm.fptosi.sat.i64.f64(double %fix)
ret i64 %cvt
}
define i64 @fcvtzs_sat_f64_i64_64(double %dbl) {
-; CHECK-SD-LABEL: fcvtzs_sat_f64_i64_64:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs x0, d0, #64
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_sat_f64_i64_64:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4895412794951729152 // =0x43f0000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzs x0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_sat_f64_i64_64:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs x0, d0, #64
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 18446744073709551616.0
%cvt = call i64 @llvm.fptosi.sat.i64.f64(double %fix)
ret i64 %cvt
}
define double @fcvtzs_sat_f64_i64_7_fpr(double %dbl) {
-; CHECK-SD-LABEL: fcvtzs_sat_f64_i64_7_fpr:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs d0, d0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_sat_f64_i64_7_fpr:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4638707616191610880 // =0x4060000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzs d0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_sat_f64_i64_7_fpr:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs d0, d0, #7
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 128.0
%cvt = call i64 @llvm.fptosi.sat.i64.f64(double %fix)
%bc = bitcast i64 %cvt to double
@@ -1431,18 +923,10 @@ define double @fcvtzs_sat_f64_i64_7_fpr(double %dbl) {
}
define double @fcvtzs_sat_f64_i64_64_fpr(double %dbl) {
-; CHECK-SD-LABEL: fcvtzs_sat_f64_i64_64_fpr:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs d0, d0, #64
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzs_sat_f64_i64_64_fpr:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4895412794951729152 // =0x43f0000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzs d0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzs_sat_f64_i64_64_fpr:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs d0, d0, #64
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 18446744073709551616.0
%cvt = call i64 @llvm.fptosi.sat.i64.f64(double %fix)
%bc = bitcast i64 %cvt to double
@@ -1461,18 +945,10 @@ define i32 @fcvtzs_sat_f16_i32_7(half %dbl) {
; CHECK-NO16-NEXT: fcvtzs w0, s0
; CHECK-NO16-NEXT: ret
;
-; CHECK-SD-FP16-LABEL: fcvtzs_sat_f16_i32_7:
-; CHECK-SD-FP16: // %bb.0:
-; CHECK-SD-FP16-NEXT: fcvtzs w0, h0, #7
-; CHECK-SD-FP16-NEXT: ret
-;
-; CHECK-GI-FP16-LABEL: fcvtzs_sat_f16_i32_7:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI66_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI66_0]
-; CHECK-GI-FP16-NEXT: fmul h0, h0, h1
-; CHECK-GI-FP16-NEXT: fcvtzs w0, h0
-; CHECK-GI-FP16-NEXT: ret
+; CHECK-FP16-LABEL: fcvtzs_sat_f16_i32_7:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: fcvtzs w0, h0, #7
+; CHECK-FP16-NEXT: ret
%fix = fmul half %dbl, 128.0
%cvt = call i32 @llvm.fptosi.sat.i32.f16(half %fix)
ret i32 %cvt
@@ -1489,18 +965,10 @@ define i32 @fcvtzs_sat_f16_i32_15(half %dbl) {
; CHECK-NO16-NEXT: fcvtzs w0, s0
; CHECK-NO16-NEXT: ret
;
-; CHECK-SD-FP16-LABEL: fcvtzs_sat_f16_i32_15:
-; CHECK-SD-FP16: // %bb.0:
-; CHECK-SD-FP16-NEXT: fcvtzs w0, h0, #15
-; CHECK-SD-FP16-NEXT: ret
-;
-; CHECK-GI-FP16-LABEL: fcvtzs_sat_f16_i32_15:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI67_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI67_0]
-; CHECK-GI-FP16-NEXT: fmul h0, h0, h1
-; CHECK-GI-FP16-NEXT: fcvtzs w0, h0
-; CHECK-GI-FP16-NEXT: ret
+; CHECK-FP16-LABEL: fcvtzs_sat_f16_i32_15:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: fcvtzs w0, h0, #15
+; CHECK-FP16-NEXT: ret
%fix = fmul half %dbl, 32768.0
%cvt = call i32 @llvm.fptosi.sat.i32.f16(half %fix)
ret i32 %cvt
@@ -1517,18 +985,10 @@ define i64 @fcvtzs_sat_f16_i64_7(half %dbl) {
; CHECK-NO16-NEXT: fcvtzs x0, s0
; CHECK-NO16-NEXT: ret
;
-; CHECK-SD-FP16-LABEL: fcvtzs_sat_f16_i64_7:
-; CHECK-SD-FP16: // %bb.0:
-; CHECK-SD-FP16-NEXT: fcvtzs x0, h0, #7
-; CHECK-SD-FP16-NEXT: ret
-;
-; CHECK-GI-FP16-LABEL: fcvtzs_sat_f16_i64_7:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI68_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI68_0]
-; CHECK-GI-FP16-NEXT: fmul h0, h0, h1
-; CHECK-GI-FP16-NEXT: fcvtzs x0, h0
-; CHECK-GI-FP16-NEXT: ret
+; CHECK-FP16-LABEL: fcvtzs_sat_f16_i64_7:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: fcvtzs x0, h0, #7
+; CHECK-FP16-NEXT: ret
%fix = fmul half %dbl, 128.0
%cvt = call i64 @llvm.fptosi.sat.i64.f16(half %fix)
ret i64 %cvt
@@ -1545,18 +1005,10 @@ define i64 @fcvtzs_sat_f16_i64_15(half %dbl) {
; CHECK-NO16-NEXT: fcvtzs x0, s0
; CHECK-NO16-NEXT: ret
;
-; CHECK-SD-FP16-LABEL: fcvtzs_sat_f16_i64_15:
-; CHECK-SD-FP16: // %bb.0:
-; CHECK-SD-FP16-NEXT: fcvtzs x0, h0, #15
-; CHECK-SD-FP16-NEXT: ret
-;
-; CHECK-GI-FP16-LABEL: fcvtzs_sat_f16_i64_15:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI69_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI69_0]
-; CHECK-GI-FP16-NEXT: fmul h0, h0, h1
-; CHECK-GI-FP16-NEXT: fcvtzs x0, h0
-; CHECK-GI-FP16-NEXT: ret
+; CHECK-FP16-LABEL: fcvtzs_sat_f16_i64_15:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: fcvtzs x0, h0, #15
+; CHECK-FP16-NEXT: ret
%fix = fmul half %dbl, 32768.0
%cvt = call i64 @llvm.fptosi.sat.i64.f16(half %fix)
ret i64 %cvt
@@ -1572,52 +1024,30 @@ declare i32 @llvm.fptoui.sat.i32.f16(half)
declare i64 @llvm.fptoui.sat.i64.f16(half)
define i32 @fcvtzu_sat_f32_i32_7(float %flt) {
-; CHECK-SD-LABEL: fcvtzu_sat_f32_i32_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu w0, s0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzu_sat_f32_i32_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: movi v1.2s, #67, lsl #24
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzu w0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzu_sat_f32_i32_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu w0, s0, #7
+; CHECK-NEXT: ret
%fix = fmul float %flt, 128.0
%cvt = call i32 @llvm.fptoui.sat.i32.f32(float %fix)
ret i32 %cvt
}
define i32 @fcvtzu_sat_f32_i32_32(float %flt) {
-; CHECK-SD-LABEL: fcvtzu_sat_f32_i32_32:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu w0, s0, #32
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzu_sat_f32_i32_32:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #1333788672 // =0x4f800000
-; CHECK-GI-NEXT: fmov s1, w8
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzu w0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzu_sat_f32_i32_32:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu w0, s0, #32
+; CHECK-NEXT: ret
%fix = fmul float %flt, 4294967296.0
%cvt = call i32 @llvm.fptoui.sat.i32.f32(float %fix)
ret i32 %cvt
}
define float @fcvtzu_sat_f32_i32_7_fpr(float %flt) {
-; CHECK-SD-LABEL: fcvtzu_sat_f32_i32_7_fpr:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu s0, s0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzu_sat_f32_i32_7_fpr:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: movi v1.2s, #67, lsl #24
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzu s0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzu_sat_f32_i32_7_fpr:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu s0, s0, #7
+; CHECK-NEXT: ret
%fix = fmul float %flt, 128.0
%cvt = call i32 @llvm.fptoui.sat.i32.f32(float %fix)
%bc = bitcast i32 %cvt to float
@@ -1625,18 +1055,10 @@ define float @fcvtzu_sat_f32_i32_7_fpr(float %flt) {
}
define float @fcvtzu_sat_f32_i32_32_fpr(float %flt) {
-; CHECK-SD-LABEL: fcvtzu_sat_f32_i32_32_fpr:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu s0, s0, #32
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzu_sat_f32_i32_32_fpr:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #1333788672 // =0x4f800000
-; CHECK-GI-NEXT: fmov s1, w8
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzu s0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzu_sat_f32_i32_32_fpr:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu s0, s0, #32
+; CHECK-NEXT: ret
%fix = fmul float %flt, 4294967296.0
%cvt = call i32 @llvm.fptoui.sat.i32.f32(float %fix)
%bc = bitcast i32 %cvt to float
@@ -1644,108 +1066,60 @@ define float @fcvtzu_sat_f32_i32_32_fpr(float %flt) {
}
define i64 @fcvtzu_sat_f32_i64_64(float %flt) {
-; CHECK-SD-LABEL: fcvtzu_sat_f32_i64_64:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu x0, s0, #64
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzu_sat_f32_i64_64:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #1602224128 // =0x5f800000
-; CHECK-GI-NEXT: fmov s1, w8
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzu x0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzu_sat_f32_i64_64:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu x0, s0, #64
+; CHECK-NEXT: ret
%fix = fmul float %flt, 18446744073709551616.0
%cvt = call i64 @llvm.fptoui.sat.i64.f32(float %fix)
ret i64 %cvt
}
define i32 @fcvtzu_sat_f64_i32_7(double %dbl) {
-; CHECK-SD-LABEL: fcvtzu_sat_f64_i32_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu w0, d0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzu_sat_f64_i32_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4638707616191610880 // =0x4060000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzu w0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzu_sat_f64_i32_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu w0, d0, #7
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 128.0
%cvt = call i32 @llvm.fptoui.sat.i32.f64(double %fix)
ret i32 %cvt
}
define i32 @fcvtzu_sat_f64_i32_32(double %dbl) {
-; CHECK-SD-LABEL: fcvtzu_sat_f64_i32_32:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu w0, d0, #32
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzu_sat_f64_i32_32:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4751297606875873280 // =0x41f0000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzu w0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzu_sat_f64_i32_32:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu w0, d0, #32
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 4294967296.0
%cvt = call i32 @llvm.fptoui.sat.i32.f64(double %fix)
ret i32 %cvt
}
define i64 @fcvtzu_sat_f64_i64_7(double %dbl) {
-; CHECK-SD-LABEL: fcvtzu_sat_f64_i64_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu x0, d0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzu_sat_f64_i64_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4638707616191610880 // =0x4060000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzu x0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzu_sat_f64_i64_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu x0, d0, #7
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 128.0
%cvt = call i64 @llvm.fptoui.sat.i64.f64(double %fix)
ret i64 %cvt
}
define i64 @fcvtzu_sat_f64_i64_64(double %dbl) {
-; CHECK-SD-LABEL: fcvtzu_sat_f64_i64_64:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu x0, d0, #64
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzu_sat_f64_i64_64:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4895412794951729152 // =0x43f0000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzu x0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzu_sat_f64_i64_64:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu x0, d0, #64
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 18446744073709551616.0
%cvt = call i64 @llvm.fptoui.sat.i64.f64(double %fix)
ret i64 %cvt
}
define double @fcvtzu_sat_f64_i64_7_fpr(double %dbl) {
-; CHECK-SD-LABEL: fcvtzu_sat_f64_i64_7_fpr:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu d0, d0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzu_sat_f64_i64_7_fpr:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4638707616191610880 // =0x4060000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzu d0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzu_sat_f64_i64_7_fpr:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu d0, d0, #7
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 128.0
%cvt = call i64 @llvm.fptoui.sat.i64.f64(double %fix)
%bc = bitcast i64 %cvt to double
@@ -1753,18 +1127,10 @@ define double @fcvtzu_sat_f64_i64_7_fpr(double %dbl) {
}
define double @fcvtzu_sat_f64_i64_64_fpr(double %dbl) {
-; CHECK-SD-LABEL: fcvtzu_sat_f64_i64_64_fpr:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu d0, d0, #64
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: fcvtzu_sat_f64_i64_64_fpr:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov x8, #4895412794951729152 // =0x43f0000000000000
-; CHECK-GI-NEXT: fmov d1, x8
-; CHECK-GI-NEXT: fmul d0, d0, d1
-; CHECK-GI-NEXT: fcvtzu d0, d0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: fcvtzu_sat_f64_i64_64_fpr:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu d0, d0, #64
+; CHECK-NEXT: ret
%fix = fmul double %dbl, 18446744073709551616.0
%cvt = call i64 @llvm.fptoui.sat.i64.f64(double %fix)
%bc = bitcast i64 %cvt to double
@@ -1783,18 +1149,10 @@ define i32 @fcvtzu_sat_f16_i32_7(half %dbl) {
; CHECK-NO16-NEXT: fcvtzu w0, s0
; CHECK-NO16-NEXT: ret
;
-; CHECK-SD-FP16-LABEL: fcvtzu_sat_f16_i32_7:
-; CHECK-SD-FP16: // %bb.0:
-; CHECK-SD-FP16-NEXT: fcvtzu w0, h0, #7
-; CHECK-SD-FP16-NEXT: ret
-;
-; CHECK-GI-FP16-LABEL: fcvtzu_sat_f16_i32_7:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI81_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI81_0]
-; CHECK-GI-FP16-NEXT: fmul h0, h0, h1
-; CHECK-GI-FP16-NEXT: fcvtzu w0, h0
-; CHECK-GI-FP16-NEXT: ret
+; CHECK-FP16-LABEL: fcvtzu_sat_f16_i32_7:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: fcvtzu w0, h0, #7
+; CHECK-FP16-NEXT: ret
%fix = fmul half %dbl, 128.0
%cvt = call i32 @llvm.fptoui.sat.i32.f16(half %fix)
ret i32 %cvt
@@ -1811,18 +1169,10 @@ define i32 @fcvtzu_sat_f16_i32_15(half %dbl) {
; CHECK-NO16-NEXT: fcvtzu w0, s0
; CHECK-NO16-NEXT: ret
;
-; CHECK-SD-FP16-LABEL: fcvtzu_sat_f16_i32_15:
-; CHECK-SD-FP16: // %bb.0:
-; CHECK-SD-FP16-NEXT: fcvtzu w0, h0, #15
-; CHECK-SD-FP16-NEXT: ret
-;
-; CHECK-GI-FP16-LABEL: fcvtzu_sat_f16_i32_15:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI82_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI82_0]
-; CHECK-GI-FP16-NEXT: fmul h0, h0, h1
-; CHECK-GI-FP16-NEXT: fcvtzu w0, h0
-; CHECK-GI-FP16-NEXT: ret
+; CHECK-FP16-LABEL: fcvtzu_sat_f16_i32_15:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: fcvtzu w0, h0, #15
+; CHECK-FP16-NEXT: ret
%fix = fmul half %dbl, 32768.0
%cvt = call i32 @llvm.fptoui.sat.i32.f16(half %fix)
ret i32 %cvt
@@ -1839,18 +1189,10 @@ define i64 @fcvtzu_sat_f16_i64_7(half %dbl) {
; CHECK-NO16-NEXT: fcvtzu x0, s0
; CHECK-NO16-NEXT: ret
;
-; CHECK-SD-FP16-LABEL: fcvtzu_sat_f16_i64_7:
-; CHECK-SD-FP16: // %bb.0:
-; CHECK-SD-FP16-NEXT: fcvtzu x0, h0, #7
-; CHECK-SD-FP16-NEXT: ret
-;
-; CHECK-GI-FP16-LABEL: fcvtzu_sat_f16_i64_7:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI83_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI83_0]
-; CHECK-GI-FP16-NEXT: fmul h0, h0, h1
-; CHECK-GI-FP16-NEXT: fcvtzu x0, h0
-; CHECK-GI-FP16-NEXT: ret
+; CHECK-FP16-LABEL: fcvtzu_sat_f16_i64_7:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: fcvtzu x0, h0, #7
+; CHECK-FP16-NEXT: ret
%fix = fmul half %dbl, 128.0
%cvt = call i64 @llvm.fptoui.sat.i64.f16(half %fix)
ret i64 %cvt
@@ -1867,70 +1209,40 @@ define i64 @fcvtzu_sat_f16_i64_15(half %dbl) {
; CHECK-NO16-NEXT: fcvtzu x0, s0
; CHECK-NO16-NEXT: ret
;
-; CHECK-SD-FP16-LABEL: fcvtzu_sat_f16_i64_15:
-; CHECK-SD-FP16: // %bb.0:
-; CHECK-SD-FP16-NEXT: fcvtzu x0, h0, #15
-; CHECK-SD-FP16-NEXT: ret
-;
-; CHECK-GI-FP16-LABEL: fcvtzu_sat_f16_i64_15:
-; CHECK-GI-FP16: // %bb.0:
-; CHECK-GI-FP16-NEXT: adrp x8, .LCPI84_0
-; CHECK-GI-FP16-NEXT: ldr h1, [x8, :lo12:.LCPI84_0]
-; CHECK-GI-FP16-NEXT: fmul h0, h0, h1
-; CHECK-GI-FP16-NEXT: fcvtzu x0, h0
-; CHECK-GI-FP16-NEXT: ret
+; CHECK-FP16-LABEL: fcvtzu_sat_f16_i64_15:
+; CHECK-FP16: // %bb.0:
+; CHECK-FP16-NEXT: fcvtzu x0, h0, #15
+; CHECK-FP16-NEXT: ret
%fix = fmul half %dbl, 32768.0
%cvt = call i64 @llvm.fptoui.sat.i64.f16(half %fix)
ret i64 %cvt
}
define i32 @neon_fcvtzs_f32_i32_7(float %a) {
-; CHECK-SD-LABEL: neon_fcvtzs_f32_i32_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs w0, s0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: neon_fcvtzs_f32_i32_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: movi v1.2s, #67, lsl #24
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzs w0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: neon_fcvtzs_f32_i32_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs w0, s0, #7
+; CHECK-NEXT: ret
%mul = fmul float %a, 128.0
%r = call i32 @llvm.aarch64.neon.fcvtzs.i32.f32(float %mul)
ret i32 %r
}
define i32 @neon_fcvtzs_f32_i32_32(float %a) {
-; CHECK-SD-LABEL: neon_fcvtzs_f32_i32_32:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs w0, s0, #32
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: neon_fcvtzs_f32_i32_32:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #1333788672 // =0x4f800000
-; CHECK-GI-NEXT: fmov s1, w8
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzs w0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: neon_fcvtzs_f32_i32_32:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs w0, s0, #32
+; CHECK-NEXT: ret
%mul = fmul float %a, 4294967296.0
%r = call i32 @llvm.aarch64.neon.fcvtzs.i32.f32(float %mul)
ret i32 %r
}
define float @neon_fcvtzs_f32_i32_7_bitcast(float %a) {
-; CHECK-SD-LABEL: neon_fcvtzs_f32_i32_7_bitcast:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs s0, s0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: neon_fcvtzs_f32_i32_7_bitcast:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: movi v1.2s, #67, lsl #24
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzs s0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: neon_fcvtzs_f32_i32_7_bitcast:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs s0, s0, #7
+; CHECK-NEXT: ret
%mul = fmul float %a, 128.0
%r = call i32 @llvm.aarch64.neon.fcvtzs.i32.f32(float %mul)
%bc = bitcast i32 %r to float
@@ -1938,18 +1250,10 @@ define float @neon_fcvtzs_f32_i32_7_bitcast(float %a) {
}
define float @neon_fcvtzs_f32_i32_32_bitcast(float %a) {
-; CHECK-SD-LABEL: neon_fcvtzs_f32_i32_32_bitcast:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzs s0, s0, #32
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: neon_fcvtzs_f32_i32_32_bitcast:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #1333788672 // =0x4f800000
-; CHECK-GI-NEXT: fmov s1, w8
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzs s0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: neon_fcvtzs_f32_i32_32_bitcast:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzs s0, s0, #32
+; CHECK-NEXT: ret
%mul = fmul float %a, 4294967296.0
%r = call i32 @llvm.aarch64.neon.fcvtzs.i32.f32(float %mul)
%bc = bitcast i32 %r to float
@@ -1957,52 +1261,30 @@ define float @neon_fcvtzs_f32_i32_32_bitcast(float %a) {
}
define i32 @neon_fcvtzu_f32_i32_7(float %a) {
-; CHECK-SD-LABEL: neon_fcvtzu_f32_i32_7:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu w0, s0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: neon_fcvtzu_f32_i32_7:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: movi v1.2s, #67, lsl #24
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzu w0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: neon_fcvtzu_f32_i32_7:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu w0, s0, #7
+; CHECK-NEXT: ret
%mul = fmul float %a, 128.0
%r = call i32 @llvm.aarch64.neon.fcvtzu.i32.f32(float %mul)
ret i32 %r
}
define i32 @neon_fcvtzu_f32_i32_32(float %a) {
-; CHECK-SD-LABEL: neon_fcvtzu_f32_i32_32:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu w0, s0, #32
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: neon_fcvtzu_f32_i32_32:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #1333788672 // =0x4f800000
-; CHECK-GI-NEXT: fmov s1, w8
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzu w0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: neon_fcvtzu_f32_i32_32:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu w0, s0, #32
+; CHECK-NEXT: ret
%mul = fmul float %a, 4294967296.0
%r = call i32 @llvm.aarch64.neon.fcvtzu.i32.f32(float %mul)
ret i32 %r
}
define float @neon_fcvtzu_f32_i32_7_bitcast(float %a) {
-; CHECK-SD-LABEL: neon_fcvtzu_f32_i32_7_bitcast:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu s0, s0, #7
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: neon_fcvtzu_f32_i32_7_bitcast:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: movi v1.2s, #67, lsl #24
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzu s0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: neon_fcvtzu_f32_i32_7_bitcast:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu s0, s0, #7
+; CHECK-NEXT: ret
%mul = fmul float %a, 128.0
%r = call i32 @llvm.aarch64.neon.fcvtzu.i32.f32(float %mul)
%bc = bitcast i32 %r to float
@@ -2010,24 +1292,12 @@ define float @neon_fcvtzu_f32_i32_7_bitcast(float %a) {
}
define float @neon_fcvtzu_f32_i32_32_bitcast(float %a) {
-; CHECK-SD-LABEL: neon_fcvtzu_f32_i32_32_bitcast:
-; CHECK-SD: // %bb.0:
-; CHECK-SD-NEXT: fcvtzu s0, s0, #32
-; CHECK-SD-NEXT: ret
-;
-; CHECK-GI-LABEL: neon_fcvtzu_f32_i32_32_bitcast:
-; CHECK-GI: // %bb.0:
-; CHECK-GI-NEXT: mov w8, #1333788672 // =0x4f800000
-; CHECK-GI-NEXT: fmov s1, w8
-; CHECK-GI-NEXT: fmul s0, s0, s1
-; CHECK-GI-NEXT: fcvtzu s0, s0
-; CHECK-GI-NEXT: ret
+; CHECK-LABEL: neon_fcvtzu_f32_i32_32_bitcast:
+; CHECK: // %bb.0:
+; CHECK-NEXT: fcvtzu s0, s0, #32
+; CHECK-NEXT: ret
%mul = fmul float %a, 4294967296.0
%r = call i32 @llvm.aarch64.neon.fcvtzu.i32.f32(float %mul)
%bc = bitcast i32 %r to float
ret float %bc
}
-
-;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
-; CHECK: {{.*}}
-; CHECK-FP16: {{.*}}
More information about the llvm-commits
mailing list