|
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