Skip to content

Commit 3de9035

Browse files
!fixup fix MPO and simplify builder calls
1 parent c0c19ea commit 3de9035

File tree

3 files changed

+32
-13
lines changed

3 files changed

+32
-13
lines changed

llvm/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "RISCVLegalizerInfo.h"
1414
#include "RISCVMachineFunctionInfo.h"
1515
#include "RISCVSubtarget.h"
16+
#include "llvm/CodeGen/GlobalISel/GenericMachineInstrs.h"
1617
#include "llvm/CodeGen/GlobalISel/LegalizerHelper.h"
1718
#include "llvm/CodeGen/GlobalISel/MachineIRBuilder.h"
1819
#include "llvm/CodeGen/MachineRegisterInfo.h"
@@ -335,7 +336,6 @@ static Type *getTypeForLLT(LLT Ty, LLVMContext &C) {
335336
return IntegerType::get(C, Ty.getSizeInBits());
336337
}
337338

338-
#include "llvm/CodeGen/GlobalISel/GenericMachineInstrs.h"
339339
bool RISCVLegalizerInfo::legalizeIntrinsic(LegalizerHelper &Helper,
340340
MachineInstr &MI) const {
341341
Intrinsic::ID IntrinsicID = cast<GIntrinsic>(MI).getIntrinsicID();
@@ -352,22 +352,18 @@ bool RISCVLegalizerInfo::legalizeIntrinsic(LegalizerHelper &Helper,
352352
const DataLayout &DL = MIRBuilder.getDataLayout();
353353
LLVMContext &Ctx = MF.getFunction().getContext();
354354

355-
Register DstLst = MI.getOperand(0).getReg();
355+
Register DstLst = MI.getOperand(1).getReg();
356356
LLT PtrTy = MRI.getType(DstLst);
357357

358358
// Load the source va_list
359359
Align Alignment = Align(DL.getABITypeAlign(getTypeForLLT(PtrTy, Ctx)));
360-
MachineMemOperand *LoadMMO =
361-
MF.getMachineMemOperand(MachinePointerInfo::getUnknownStack(MF),
362-
MachineMemOperand::MOLoad, PtrTy, Alignment);
363-
Register Tmp = MRI.createGenericVirtualRegister(PtrTy);
364-
Register SrcLst = MI.getOperand(1).getReg();
365-
MIRBuilder.buildLoad(Tmp, SrcLst, *LoadMMO);
360+
MachineMemOperand *LoadMMO = MF.getMachineMemOperand(
361+
MachinePointerInfo(), MachineMemOperand::MOLoad, PtrTy, Alignment);
362+
auto Tmp = MIRBuilder.buildLoad(PtrTy, MI.getOperand(2), *LoadMMO);
366363

367364
// Store the result in the destination va_list
368-
MachineMemOperand *StoreMMO =
369-
MF.getMachineMemOperand(MachinePointerInfo::getUnknownStack(MF),
370-
MachineMemOperand::MOStore, PtrTy, Alignment);
365+
MachineMemOperand *StoreMMO = MF.getMachineMemOperand(
366+
MachinePointerInfo(), MachineMemOperand::MOStore, PtrTy, Alignment);
371367
MIRBuilder.buildStore(DstLst, Tmp, *StoreMMO);
372368

373369
MI.eraseFromParent();

llvm/test/CodeGen/RISCV/GlobalISel/irtranslator/vacopy.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ define void @test_va_copy(ptr %dest_list, ptr %src_list) {
1212
; RV32I-NEXT: {{ $}}
1313
; RV32I-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
1414
; RV32I-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x11
15-
; RV32I-NEXT: G_VACOPY [[COPY]](p0), [[COPY1]]
15+
; RV32I-NEXT: G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.va_copy), [[COPY]](p0), [[COPY1]](p0)
1616
; RV32I-NEXT: PseudoRET
1717
;
1818
; RV64I-LABEL: name: test_va_copy
@@ -21,7 +21,7 @@ define void @test_va_copy(ptr %dest_list, ptr %src_list) {
2121
; RV64I-NEXT: {{ $}}
2222
; RV64I-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
2323
; RV64I-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x11
24-
; RV64I-NEXT: G_VACOPY [[COPY]](p0), [[COPY1]]
24+
; RV64I-NEXT: G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.va_copy), [[COPY]](p0), [[COPY1]](p0)
2525
; RV64I-NEXT: PseudoRET
2626
call void @llvm.va_copy(ptr %dest_list, ptr %src_list)
2727
ret void
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
# RUN: llc -mtriple=riscv32 -run-pass=legalizer %s -o - | FileCheck %s
3+
# RUN: llc -mtriple=riscv64 -run-pass=legalizer %s -o - | FileCheck %s
4+
5+
---
6+
name: test_va_copy
7+
body: |
8+
bb.1:
9+
liveins: $x10, $x11
10+
11+
; CHECK-LABEL: name: test_va_copy
12+
; CHECK: liveins: $x10, $x11
13+
; CHECK-NEXT: {{ $}}
14+
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x10
15+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(p0) = COPY $x11
16+
; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(p0) = G_LOAD [[COPY1]](p0) :: (load (p0))
17+
; CHECK-NEXT: G_STORE [[COPY]](p0), [[LOAD]](p0) :: (store (p0))
18+
; CHECK-NEXT: PseudoRET
19+
%0:_(p0) = COPY $x10
20+
%1:_(p0) = COPY $x11
21+
G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.va_copy), %0(p0), %1(p0)
22+
PseudoRET
23+
...

0 commit comments

Comments
 (0)