Skip to content

Commit 0465b9e

Browse files
committed
[LoongArch] Set isAsCheapAsAMove on LU{12,32,52}I.D/ADDI.D and {X}ORI instructions
1 parent f21c2fa commit 0465b9e

File tree

9 files changed

+833
-1377
lines changed

9 files changed

+833
-1377
lines changed

llvm/lib/Target/LoongArch/LoongArchInstrInfo.td

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -734,7 +734,7 @@ def ADD_W : ALU_3R<0x00100000>;
734734
def SUB_W : ALU_3R<0x00110000>;
735735
def ADDI_W : ALU_2RI12<0x02800000, simm12_addlike>;
736736
def ALSL_W : ALU_3RI2<0x00040000, uimm2_plus1>;
737-
let isReMaterializable = 1 in {
737+
let isReMaterializable = 1, isAsCheapAsAMove = 1 in {
738738
def LU12I_W : ALU_1RI20<0x14000000, simm20_lu12iw>;
739739
}
740740
def SLT : ALU_3R<0x00120000>;
@@ -751,7 +751,7 @@ def XOR : ALU_3R<0x00158000>;
751751
def ANDN : ALU_3R<0x00168000>;
752752
def ORN : ALU_3R<0x00160000>;
753753
def ANDI : ALU_2RI12<0x03400000, uimm12>;
754-
let isReMaterializable = 1 in {
754+
let isReMaterializable = 1, isAsCheapAsAMove = 1 in {
755755
def ORI : ALU_2RI12<0x03800000, uimm12_ori>;
756756
def XORI : ALU_2RI12<0x03c00000, uimm12>;
757757
}
@@ -858,20 +858,20 @@ def ADD_D : ALU_3R<0x00108000>;
858858
def SUB_D : ALU_3R<0x00118000>;
859859
// ADDI_D isn't always rematerializable, but isReMaterializable will be used as
860860
// a hint which is verified in isReallyTriviallyReMaterializable.
861-
let isReMaterializable = 1 in {
861+
let isReMaterializable = 1, isAsCheapAsAMove = 1 in {
862862
def ADDI_D : ALU_2RI12<0x02c00000, simm12_addlike>;
863863
}
864864
def ADDU16I_D : ALU_2RI16<0x10000000, simm16>;
865865
def ALSL_WU : ALU_3RI2<0x00060000, uimm2_plus1>;
866866
def ALSL_D : ALU_3RI2<0x002c0000, uimm2_plus1>;
867867
let Constraints = "$rd = $dst" in {
868868
let hasSideEffects = 0, mayLoad = 0, mayStore = 0,
869-
isReMaterializable = 1 in
869+
isReMaterializable = 1, isAsCheapAsAMove = 1 in
870870
def LU32I_D : Fmt1RI20<0x16000000, (outs GPR:$dst),
871871
(ins GPR:$rd, simm20_lu32id:$imm20),
872872
"$rd, $imm20">;
873873
}
874-
let isReMaterializable = 1 in {
874+
let isReMaterializable = 1, isAsCheapAsAMove = 1 in {
875875
def LU52I_D : ALU_2RI12<0x03000000, simm12_lu52id>;
876876
}
877877
def PCADDU18I : ALU_1RI20<0x1e000000, simm20_pcaddu18i>;

llvm/test/CodeGen/LoongArch/calling-conv-lp64d.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ define i64 @caller_float_in_fpr() nounwind {
2828
; CHECK: # %bb.0:
2929
; CHECK-NEXT: addi.d $sp, $sp, -16
3030
; CHECK-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill
31-
; CHECK-NEXT: ori $a0, $zero, 1
3231
; CHECK-NEXT: movgr2fr.w $fa0, $zero
3332
; CHECK-NEXT: movgr2fr.d $fa1, $zero
33+
; CHECK-NEXT: ori $a0, $zero, 1
3434
; CHECK-NEXT: bl %plt(callee_float_in_fpr)
3535
; CHECK-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload
3636
; CHECK-NEXT: addi.d $sp, $sp, 16

llvm/test/CodeGen/LoongArch/can-not-realign-stack.ll

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ define dso_local noundef signext i32 @main() nounwind {
1616
; CHECK: # %bb.0: # %entry
1717
; CHECK-NEXT: addi.d $sp, $sp, -272
1818
; CHECK-NEXT: st.d $ra, $sp, 264 # 8-byte Folded Spill
19-
; CHECK-NEXT: st.d $fp, $sp, 256 # 8-byte Folded Spill
2019
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI0_0)
2120
; CHECK-NEXT: addi.d $a0, $a0, %pc_lo12(.LCPI0_0)
2221
; CHECK-NEXT: xvld $xr0, $a0, 0
@@ -33,25 +32,23 @@ define dso_local noundef signext i32 @main() nounwind {
3332
; CHECK-NEXT: addi.d $a0, $a0, %pc_lo12(.LCPI0_3)
3433
; CHECK-NEXT: xvld $xr3, $a0, 0
3534
; CHECK-NEXT: xvst $xr3, $sp, 0 # 32-byte Folded Spill
36-
; CHECK-NEXT: xvst $xr0, $sp, 128
37-
; CHECK-NEXT: xvst $xr1, $sp, 160
38-
; CHECK-NEXT: xvst $xr2, $sp, 192
39-
; CHECK-NEXT: xvst $xr3, $sp, 224
40-
; CHECK-NEXT: addi.d $fp, $sp, 128
41-
; CHECK-NEXT: move $a0, $fp
35+
; CHECK-NEXT: xvst $xr0, $sp, 136
36+
; CHECK-NEXT: xvst $xr1, $sp, 168
37+
; CHECK-NEXT: xvst $xr2, $sp, 200
38+
; CHECK-NEXT: xvst $xr3, $sp, 232
39+
; CHECK-NEXT: addi.d $a0, $sp, 136
4240
; CHECK-NEXT: bl %plt(foo)
4341
; CHECK-NEXT: xvld $xr0, $sp, 96 # 32-byte Folded Reload
44-
; CHECK-NEXT: xvst $xr0, $sp, 128
42+
; CHECK-NEXT: xvst $xr0, $sp, 136
4543
; CHECK-NEXT: xvld $xr0, $sp, 64 # 32-byte Folded Reload
46-
; CHECK-NEXT: xvst $xr0, $sp, 160
44+
; CHECK-NEXT: xvst $xr0, $sp, 168
4745
; CHECK-NEXT: xvld $xr0, $sp, 32 # 32-byte Folded Reload
48-
; CHECK-NEXT: xvst $xr0, $sp, 192
46+
; CHECK-NEXT: xvst $xr0, $sp, 200
4947
; CHECK-NEXT: xvld $xr0, $sp, 0 # 32-byte Folded Reload
50-
; CHECK-NEXT: xvst $xr0, $sp, 224
51-
; CHECK-NEXT: move $a0, $fp
48+
; CHECK-NEXT: xvst $xr0, $sp, 232
49+
; CHECK-NEXT: addi.d $a0, $sp, 136
5250
; CHECK-NEXT: bl %plt(bar)
5351
; CHECK-NEXT: move $a0, $zero
54-
; CHECK-NEXT: ld.d $fp, $sp, 256 # 8-byte Folded Reload
5552
; CHECK-NEXT: ld.d $ra, $sp, 264 # 8-byte Folded Reload
5653
; CHECK-NEXT: addi.d $sp, $sp, 272
5754
; CHECK-NEXT: ret

0 commit comments

Comments
 (0)