Skip to content

Commit 8634e35

Browse files
authored
[AArch64][ARM] Avoid some APFloat copies in tablegen patterns. NFC. (#114416)
Either the N->getValueAPF() was being unused or we were failing to make use of it returning a const APFloat&
1 parent c3782f6 commit 8634e35

File tree

2 files changed

+14
-22
lines changed

2 files changed

+14
-22
lines changed

llvm/lib/Target/AArch64/AArch64InstrFormats.td

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1390,15 +1390,13 @@ def arith_uxtx : ComplexPattern<i64, 2, "SelectArithUXTXRegister", []>;
13901390
// Floating-point immediate.
13911391

13921392
def fpimm16XForm : SDNodeXForm<fpimm, [{
1393-
APFloat InVal = N->getValueAPF();
1394-
uint32_t enc = AArch64_AM::getFP16Imm(InVal);
1395-
return CurDAG->getTargetConstant(enc, SDLoc(N), MVT::i32);
1393+
uint32_t Enc = AArch64_AM::getFP16Imm(N->getValueAPF());
1394+
return CurDAG->getTargetConstant(Enc, SDLoc(N), MVT::i32);
13961395
}]>;
13971396

13981397
def fpimm32XForm : SDNodeXForm<fpimm, [{
1399-
APFloat InVal = N->getValueAPF();
1400-
uint32_t enc = AArch64_AM::getFP32Imm(InVal);
1401-
return CurDAG->getTargetConstant(enc, SDLoc(N), MVT::i32);
1398+
uint32_t Enc = AArch64_AM::getFP32Imm(N->getValueAPF());
1399+
return CurDAG->getTargetConstant(Enc, SDLoc(N), MVT::i32);
14021400
}]>;
14031401

14041402
def fpimm32SIMDModImmType4XForm : SDNodeXForm<fpimm, [{
@@ -1409,9 +1407,8 @@ def fpimm32SIMDModImmType4XForm : SDNodeXForm<fpimm, [{
14091407
}]>;
14101408

14111409
def fpimm64XForm : SDNodeXForm<fpimm, [{
1412-
APFloat InVal = N->getValueAPF();
1413-
uint32_t enc = AArch64_AM::getFP64Imm(InVal);
1414-
return CurDAG->getTargetConstant(enc, SDLoc(N), MVT::i32);
1410+
uint32_t Enc = AArch64_AM::getFP64Imm(N->getValueAPF());
1411+
return CurDAG->getTargetConstant(Enc, SDLoc(N), MVT::i32);
14151412
}]>;
14161413

14171414
def fpimm16 : Operand<f16>,
@@ -1681,7 +1678,6 @@ def simdimmtype10 : Operand<i32>,
16811678
return AArch64_AM::isAdvSIMDModImmType10(
16821679
Imm.bitcastToAPInt().getZExtValue());
16831680
}], SDNodeXForm<fpimm, [{
1684-
APFloat InVal = N->getValueAPF();
16851681
uint32_t enc = AArch64_AM::encodeAdvSIMDModImmType10(N->getValueAPF()
16861682
.bitcastToAPInt()
16871683
.getZExtValue());

llvm/lib/Target/ARM/ARMInstrVFP.td

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -46,28 +46,25 @@ def vfp_f16imm : Operand<f16>,
4646
PatLeaf<(f16 fpimm), [{
4747
return ARM_AM::getFP16Imm(N->getValueAPF()) != -1;
4848
}], SDNodeXForm<fpimm, [{
49-
APFloat InVal = N->getValueAPF();
50-
uint32_t enc = ARM_AM::getFP16Imm(InVal);
51-
return CurDAG->getTargetConstant(enc, SDLoc(N), MVT::i32);
49+
uint32_t Enc = ARM_AM::getFP16Imm(N->getValueAPF());
50+
return CurDAG->getTargetConstant(Enc, SDLoc(N), MVT::i32);
5251
}]>> {
5352
let PrintMethod = "printFPImmOperand";
5453
let ParserMatchClass = FPImmOperand;
5554
}
5655

5756
def vfp_f32f16imm_xform : SDNodeXForm<fpimm, [{
58-
APFloat InVal = N->getValueAPF();
59-
uint32_t enc = ARM_AM::getFP32FP16Imm(InVal);
60-
return CurDAG->getTargetConstant(enc, SDLoc(N), MVT::i32);
57+
uint32_t Enc = ARM_AM::getFP32FP16Imm(N->getValueAPF());
58+
return CurDAG->getTargetConstant(Enc, SDLoc(N), MVT::i32);
6159
}]>;
6260

6361
def vfp_f32f16imm : PatLeaf<(f32 fpimm), [{
6462
return ARM_AM::getFP32FP16Imm(N->getValueAPF()) != -1;
6563
}], vfp_f32f16imm_xform>;
6664

6765
def vfp_f32imm_xform : SDNodeXForm<fpimm, [{
68-
APFloat InVal = N->getValueAPF();
69-
uint32_t enc = ARM_AM::getFP32Imm(InVal);
70-
return CurDAG->getTargetConstant(enc, SDLoc(N), MVT::i32);
66+
uint32_t Enc = ARM_AM::getFP32Imm(N->getValueAPF());
67+
return CurDAG->getTargetConstant(Enc, SDLoc(N), MVT::i32);
7168
}]>;
7269

7370
def gi_vfp_f32imm : GICustomOperandRenderer<"renderVFPF32Imm">,
@@ -88,9 +85,8 @@ def vfp_f32imm : Operand<f32>,
8885
}
8986

9087
def vfp_f64imm_xform : SDNodeXForm<fpimm, [{
91-
APFloat InVal = N->getValueAPF();
92-
uint32_t enc = ARM_AM::getFP64Imm(InVal);
93-
return CurDAG->getTargetConstant(enc, SDLoc(N), MVT::i32);
88+
uint32_t Enc = ARM_AM::getFP64Imm(N->getValueAPF());
89+
return CurDAG->getTargetConstant(Enc, SDLoc(N), MVT::i32);
9490
}]>;
9591

9692
def gi_vfp_f64imm : GICustomOperandRenderer<"renderVFPF64Imm">,

0 commit comments

Comments
 (0)