Skip to content

Commit e9f22cb

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

File tree

2 files changed

+7
-15
lines changed

2 files changed

+7
-15
lines changed

llvm/lib/Target/AArch64/AArch64InstrFormats.td

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1390,14 +1390,12 @@ 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);
1393+
uint32_t enc = AArch64_AM::getFP16Imm(N->getValueAPF());
13951394
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);
1398+
uint32_t enc = AArch64_AM::getFP32Imm(N->getValueAPF());
14011399
return CurDAG->getTargetConstant(enc, SDLoc(N), MVT::i32);
14021400
}]>;
14031401

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

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

@@ -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: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,17 +46,15 @@ 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);
49+
uint32_t enc = ARM_AM::getFP16Imm(N->getValueAPF());
5150
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);
57+
uint32_t enc = ARM_AM::getFP32FP16Imm(N->getValueAPF());
6058
return CurDAG->getTargetConstant(enc, SDLoc(N), MVT::i32);
6159
}]>;
6260

@@ -65,8 +63,7 @@ def vfp_f32f16imm : PatLeaf<(f32 fpimm), [{
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);
66+
uint32_t enc = ARM_AM::getFP32Imm(N->getValueAPF());
7067
return CurDAG->getTargetConstant(enc, SDLoc(N), MVT::i32);
7168
}]>;
7269

@@ -88,8 +85,7 @@ 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);
88+
uint32_t enc = ARM_AM::getFP64Imm(N->getValueAPF());
9389
return CurDAG->getTargetConstant(enc, SDLoc(N), MVT::i32);
9490
}]>;
9591

0 commit comments

Comments
 (0)