Skip to content

Commit d18e4f7

Browse files
committed
Catching inconsistencies in load memory, result, and range metadata type
1 parent 9a95c09 commit d18e4f7

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

llvm/lib/CodeGen/MachineVerifier.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1274,6 +1274,12 @@ void MachineVerifier::verifyPreISelGenericInstruction(const MachineInstr *MI) {
12741274
if (TypeSize::isKnownGT(MMO.getSize().getValue(),
12751275
ValTy.getSizeInBytes()))
12761276
report("load memory size cannot exceed result size", MI);
1277+
1278+
if (MMO.getRanges() && (ValTy.isVector() != MMO.getType().isVector())) {
1279+
report("scalar operands cannot be loaded into vector values and vice "
1280+
"versa",
1281+
MI);
1282+
}
12771283
} else if (MI->getOpcode() == TargetOpcode::G_STORE) {
12781284
if (TypeSize::isKnownLT(ValTy.getSizeInBytes(),
12791285
MMO.getSize().getValue()))
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# RUN: not --crash llc -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti -run-pass=amdgpu-prelegalizer-combiner -verify-machineinstrs %s -o -
2+
--- |
3+
define void @range_metadata_sext_i33_signed_range_i64_load_as_v2i32() {
4+
ret void
5+
}
6+
7+
!1 = !{i64 -8589934591, i64 8589934592}
8+
9+
...
10+
---
11+
name: range_metadata_sext_i33_signed_range_i64_load_as_v2i32
12+
tracksRegLiveness: true
13+
body: |
14+
bb.0:
15+
liveins: $vgpr0, $vgpr1
16+
17+
%1:_(s32) = COPY $vgpr0
18+
%2:_(s32) = COPY $vgpr1
19+
%0:_(p1) = G_MERGE_VALUES %1(s32), %2(s32)
20+
; CHECK: Bad machine code: scalar operands cannot be loaded into vector values
21+
%3:_(<2 x s32>) = G_LOAD %0(p1) :: (volatile load (s64), align 4, !range !1, addrspace 1)
22+
$vgpr0_vgpr1 = COPY %3
23+
SI_RETURN implicit $vgpr0_vgpr1
24+
25+
...

0 commit comments

Comments
 (0)