summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/MachineVerifier.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2019-01-30 01:10:42 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2019-01-30 01:10:42 +0000
commitccb810fb5481dd91b3890805f3f85a89237faf40 (patch)
treedf1f7d2f111e912ee3f6f366c300924647408233 /llvm/lib/CodeGen/MachineVerifier.cpp
parent3a94519a777b9ac407a1d5ff5c31ec48b3768eec (diff)
downloadbcm5719-llvm-ccb810fb5481dd91b3890805f3f85a89237faf40.tar.gz
bcm5719-llvm-ccb810fb5481dd91b3890805f3f85a89237faf40.zip
GlobalISel: Verify memory size for load/store
llvm-svn: 352578
Diffstat (limited to 'llvm/lib/CodeGen/MachineVerifier.cpp')
-rw-r--r--llvm/lib/CodeGen/MachineVerifier.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/llvm/lib/CodeGen/MachineVerifier.cpp b/llvm/lib/CodeGen/MachineVerifier.cpp
index fb15c178307..761c4e68d4e 100644
--- a/llvm/lib/CodeGen/MachineVerifier.cpp
+++ b/llvm/lib/CodeGen/MachineVerifier.cpp
@@ -1004,6 +1004,7 @@ void MachineVerifier::visitMachineInstrBefore(const MachineInstr *MI) {
case TargetOpcode::G_STORE:
case TargetOpcode::G_ZEXTLOAD:
case TargetOpcode::G_SEXTLOAD: {
+ LLT ValTy = MRI->getType(MI->getOperand(0).getReg());
LLT PtrTy = MRI->getType(MI->getOperand(1).getReg());
if (!PtrTy.isPointer())
report("Generic memory instruction must access a pointer", MI);
@@ -1014,13 +1015,17 @@ void MachineVerifier::visitMachineInstrBefore(const MachineInstr *MI) {
report("Generic instruction accessing memory must have one mem operand",
MI);
} else {
+ const MachineMemOperand &MMO = **MI->memoperands_begin();
if (MI->getOpcode() == TargetOpcode::G_ZEXTLOAD ||
MI->getOpcode() == TargetOpcode::G_SEXTLOAD) {
- const MachineMemOperand &MMO = **MI->memoperands_begin();
- LLT DstTy = MRI->getType(MI->getOperand(0).getReg());
- if (MMO.getSize() * 8 >= DstTy.getSizeInBits()) {
+ if (MMO.getSize() * 8 >= ValTy.getSizeInBits())
report("Generic extload must have a narrower memory type", MI);
- }
+ } else if (MI->getOpcode() == TargetOpcode::G_LOAD) {
+ if (MMO.getSize() > (ValTy.getSizeInBits() + 7) / 8)
+ report("load memory size cannot exceed result size", MI);
+ } else if (MI->getOpcode() == TargetOpcode::G_STORE) {
+ if ((ValTy.getSizeInBits() + 7) / 8 < MMO.getSize())
+ report("store memory size cannot exceed value size", MI);
}
}
OpenPOWER on IntegriCloud