|
18 | 18 | #include "llvm/CodeGen/GlobalISel/LegalizerHelper.h" |
19 | 19 | #include "llvm/CodeGen/GlobalISel/MIPatternMatch.h" |
20 | 20 | #include "llvm/CodeGen/GlobalISel/MachineIRBuilder.h" |
| 21 | +#include "llvm/CodeGen/MachineFrameInfo.h" |
21 | 22 | #include <functional> |
22 | 23 | #include <initializer_list> |
23 | 24 | using namespace llvm; |
@@ -252,8 +253,7 @@ Z80LegalizerInfo::Z80LegalizerInfo(const Z80Subtarget &STI, |
252 | 253 | {G_FRAME_INDEX, G_GLOBAL_VALUE, G_BRINDIRECT, G_JUMP_TABLE}) |
253 | 254 | .legalFor({p[0]}); |
254 | 255 |
|
255 | | - getActionDefinitionsBuilder(G_VASTART) |
256 | | - .customFor({p[0]}); |
| 256 | + getActionDefinitionsBuilder(G_VASTART).customFor({p[0]}); |
257 | 257 |
|
258 | 258 | getActionDefinitionsBuilder(G_ICMP) |
259 | 259 | .legalForCartesianProduct({s1}, LegalTypes) |
@@ -933,11 +933,11 @@ LegalizerHelper::LegalizeResult Z80LegalizerInfo::legalizeMemIntrinsic( |
933 | 933 | return LegalizerHelper::Legalized; |
934 | 934 | } |
935 | 935 | // Lowering memmove generates a lot of code... |
936 | | - if (!MF.getFunction().hasOptSize() || Opc != TargetOpcode::G_MEMMOVE) { |
| 936 | + if (!MF.getFunction().hasOptSize() || Opc != G_MEMMOVE) { |
937 | 937 | MachineMemOperand *StoreMMO = MI.memoperands().front(); |
938 | 938 | MachineMemOperand *LoadMMO; |
939 | 939 |
|
940 | | - if (Opc == TargetOpcode::G_MEMSET) { |
| 940 | + if (Opc == G_MEMSET) { |
941 | 941 | // Store the first byte. |
942 | 942 | MIRBuilder.buildStore(SrcReg, DstReg, *StoreMMO); |
943 | 943 |
|
@@ -986,15 +986,15 @@ LegalizerHelper::LegalizeResult Z80LegalizerInfo::legalizeMemIntrinsic( |
986 | 986 | MI.eraseFromParent(); |
987 | 987 | return LegalizerHelper::Legalized; |
988 | 988 | } |
989 | | - if (Opc == TargetOpcode::G_MEMMOVE && !ConstAddr) { |
| 989 | + if (Opc == G_MEMMOVE && !ConstAddr) { |
990 | 990 | MIRBuilder.buildCopy(HL, SrcReg); |
991 | 991 | MIRBuilder.buildInstr(Is24Bit ? Z80::Cmp24ao : Z80::Cmp16ao, {}, |
992 | 992 | {DstReg}); |
993 | 993 | MIRBuilder |
994 | 994 | .buildInstr(Is24Bit ? Z80::LDR24 : Z80::LDR16, {}, |
995 | 995 | {DstReg, SrcReg, LenReg}) |
996 | 996 | .cloneMemRefs(MI); |
997 | | - } else if (Opc != TargetOpcode::G_MEMMOVE || |
| 997 | + } else if (Opc != G_MEMMOVE || |
998 | 998 | (ConstAddr && (ConstDst->Value.ule(ConstSrc->Value) || |
999 | 999 | (ConstDst->Value - ConstSrc->Value) |
1000 | 1000 | .uge(ConstLen->Value)))) { |
@@ -1059,6 +1059,36 @@ bool Z80LegalizerInfo::legalizeIntrinsic(LegalizerHelper &Helper, |
1059 | 1059 | return false; |
1060 | 1060 | break; |
1061 | 1061 | } |
| 1062 | + case Intrinsic::vacopy: { |
| 1063 | + const MachineRegisterInfo &MRI = *MIRBuilder.getMRI(); |
| 1064 | + const MachineFrameInfo &MFI = MF.getFrameInfo(); |
| 1065 | + const DataLayout &DL = MF.getDataLayout(); |
| 1066 | + |
| 1067 | + Register DstReg = MI.getOperand(1).getReg(); |
| 1068 | + MachineInstr *DstMI = MRI.getVRegDef(DstReg); |
| 1069 | + MachinePointerInfo DstMPI; |
| 1070 | + Align DstAlign = DL.getPointerABIAlignment(0); |
| 1071 | + if (DstMI && DstMI->getOpcode() == G_FRAME_INDEX) { |
| 1072 | + int FI = DstMI->getOperand(1).getIndex(); |
| 1073 | + DstMPI = MachinePointerInfo::getFixedStack(MF, FI); |
| 1074 | + DstAlign = MFI.getObjectAlign(FI); |
| 1075 | + } |
| 1076 | + |
| 1077 | + Register SrcReg = MI.getOperand(2).getReg(); |
| 1078 | + MachineInstr *SrcMI = MRI.getVRegDef(SrcReg); |
| 1079 | + MachinePointerInfo SrcMPI; |
| 1080 | + Align SrcAlign = DL.getPointerABIAlignment(0); |
| 1081 | + if (SrcMI && SrcMI->getOpcode() == G_FRAME_INDEX) { |
| 1082 | + int FI = SrcMI->getOperand(1).getIndex(); |
| 1083 | + SrcMPI = MachinePointerInfo::getFixedStack(MF, FI); |
| 1084 | + SrcAlign = MFI.getObjectAlign(FI); |
| 1085 | + } |
| 1086 | + |
| 1087 | + LLT p0 = LLT::pointer(0, TM.getPointerSizeInBits(0)); |
| 1088 | + MIRBuilder.buildStore(MIRBuilder.buildLoad(p0, SrcReg, SrcMPI, SrcAlign), |
| 1089 | + DstReg, DstMPI, DstAlign); |
| 1090 | + break; |
| 1091 | + } |
1062 | 1092 | default: |
1063 | 1093 | return false; |
1064 | 1094 | } |
|
0 commit comments