Skip to content

Commit 4f131b0

Browse files
authored
[IR] Require index width to be ule pointer width (#70015)
I don't think there is a use case for having an index type that is wider than the pointer type, and I'm not entirely clear what semantics this would even have. Also clarify the GEP semantics to explicitly say how they interact with the index type width.
1 parent 4506de1 commit 4f131b0

File tree

7 files changed

+30
-126
lines changed

7 files changed

+30
-126
lines changed

llvm/docs/LangRef.rst

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2883,7 +2883,8 @@ as follows:
28832883
This specifies the *size* of a pointer and its ``<abi>`` and
28842884
``<pref>``\erred alignments for address space ``n``. ``<pref>`` is optional
28852885
and defaults to ``<abi>``. The fourth parameter ``<idx>`` is the size of the
2886-
index that used for address calculation. If not
2886+
index that used for address calculation, which must be less than or equal
2887+
to the pointer size. If not
28872888
specified, the default index size is equal to the pointer size. All sizes
28882889
are in bits. The address space, ``n``, is optional, and if not specified,
28892890
denotes the default address space 0. The value of ``n`` must be
@@ -11030,6 +11031,24 @@ for the given testcase is equivalent to:
1103011031
ret ptr %t5
1103111032
}
1103211033

11034+
The indices are first converted to offsets in the pointer's index type. If the
11035+
currently indexed type is a struct type, the struct offset corresponding to the
11036+
index is sign-extended or truncated to the pointer index type. Otherwise, the
11037+
index itself is sign-extended or truncated, and then multiplied by the type
11038+
allocation size (that is, the size rounded up to the ABI alignment) of the
11039+
currently indexed type.
11040+
11041+
The offsets are then added to the low bits of the base address up to the index
11042+
type width, with silently-wrapping two's complement arithmetic. If the pointer
11043+
size is larger than the index size, this means that the bits outside the index
11044+
type width will not be affected.
11045+
11046+
The result value of the ``getelementptr`` may be outside the object pointed
11047+
to by the base pointer. The result value may not necessarily be used to access
11048+
memory though, even if it happens to point into allocated storage. See the
11049+
:ref:`Pointer Aliasing Rules <pointeraliasing>` section for more
11050+
information.
11051+
1103311052
If the ``inbounds`` keyword is present, the result value of a
1103411053
``getelementptr`` with any non-zero indices is a
1103511054
:ref:`poison value <poisonvalues>` if one of the following rules is violated:
@@ -11061,16 +11080,6 @@ These rules are based on the assumption that no allocated object may cross
1106111080
the unsigned address space boundary, and no allocated object may be larger
1106211081
than half the pointer index type space.
1106311082

11064-
If the ``inbounds`` keyword is not present, the offsets are added to the
11065-
base address with silently-wrapping two's complement arithmetic. If the
11066-
offsets have a different width from the pointer's index type, they are
11067-
sign-extended or truncated to the width of the pointer's index type. The result
11068-
value of the ``getelementptr`` may be outside the object pointed to by the base
11069-
pointer. The result value may not necessarily be used to access memory
11070-
though, even if it happens to point into allocated storage. See the
11071-
:ref:`Pointer Aliasing Rules <pointeraliasing>` section for more
11072-
information.
11073-
1107411083
If the ``inrange`` keyword is present before any index, loading from or
1107511084
storing to any pointer derived from the ``getelementptr`` has undefined
1107611085
behavior if the load or store would access memory outside of the bounds of

llvm/lib/IR/DataLayout.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -649,6 +649,8 @@ Error DataLayout::setPointerAlignmentInBits(uint32_t AddrSpace, Align ABIAlign,
649649
if (PrefAlign < ABIAlign)
650650
return reportError(
651651
"Preferred alignment cannot be less than the ABI alignment");
652+
if (IndexBitWidth > TypeBitWidth)
653+
return reportError("Index width cannot be larger than pointer width");
652654

653655
auto I = lower_bound(Pointers, AddrSpace,
654656
[](const PointerAlignElem &A, uint32_t AddressSpace) {

llvm/test/Analysis/ScalarEvolution/ptrtoint-constantexpr-loop.ll

Lines changed: 0 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
; RUN: opt < %s --data-layout="p:64:64:64:64" -S -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck --check-prefixes=PTR64_IDX64 %s
33
; RUN: opt < %s --data-layout="p:64:64:64:32" -S -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck --check-prefixes=PTR64_IDX32 %s
44
; RUN: opt < %s --data-layout="p:16:16:16:16" -S -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck --check-prefixes=PTR16_IDX16 %s
5-
; RUN: opt < %s --data-layout="p:16:16:16:32" -S -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck --check-prefixes=PTR16_IDX32 %s
65

76
@global = external hidden global [0 x i8]
87

@@ -63,24 +62,6 @@ define hidden ptr @trunc_ptr_to_i64(ptr %arg, ptr %arg10) {
6362
; PTR16_IDX16-NEXT: Loop %bb11: Unpredictable symbolic max backedge-taken count.
6463
; PTR16_IDX16-NEXT: Loop %bb11: Unpredictable predicated backedge-taken count.
6564
;
66-
; PTR16_IDX32-LABEL: 'trunc_ptr_to_i64'
67-
; PTR16_IDX32-NEXT: Classifying expressions for: @trunc_ptr_to_i64
68-
; PTR16_IDX32-NEXT: %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ]
69-
; PTR16_IDX32-NEXT: --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
70-
; PTR16_IDX32-NEXT: %tmp12 = getelementptr i8, ptr %arg, i64 ptrtoint (ptr @global to i64)
71-
; PTR16_IDX32-NEXT: --> ((trunc i64 ptrtoint (ptr @global to i64) to i32) + %arg) U: [0,131071) S: [0,131071) Exits: ((trunc i64 ptrtoint (ptr @global to i64) to i32) + %arg) LoopDispositions: { %bb11: Invariant }
72-
; PTR16_IDX32-NEXT: %tmp13 = bitcast ptr %tmp12 to ptr
73-
; PTR16_IDX32-NEXT: --> ((trunc i64 ptrtoint (ptr @global to i64) to i32) + %arg) U: [0,131071) S: [0,131071) Exits: ((trunc i64 ptrtoint (ptr @global to i64) to i32) + %arg) LoopDispositions: { %bb11: Invariant }
74-
; PTR16_IDX32-NEXT: %tmp14 = load i32, ptr %tmp13, align 4
75-
; PTR16_IDX32-NEXT: --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant }
76-
; PTR16_IDX32-NEXT: %tmp18 = add i32 %tmp, 2
77-
; PTR16_IDX32-NEXT: --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
78-
; PTR16_IDX32-NEXT: Determining loop execution counts for: @trunc_ptr_to_i64
79-
; PTR16_IDX32-NEXT: Loop %bb11: Unpredictable backedge-taken count.
80-
; PTR16_IDX32-NEXT: Loop %bb11: Unpredictable constant max backedge-taken count.
81-
; PTR16_IDX32-NEXT: Loop %bb11: Unpredictable symbolic max backedge-taken count.
82-
; PTR16_IDX32-NEXT: Loop %bb11: Unpredictable predicated backedge-taken count.
83-
;
8465
bb:
8566
br label %bb11
8667

@@ -154,24 +135,6 @@ define hidden ptr @trunc_ptr_to_i32(ptr %arg, ptr %arg10) {
154135
; PTR16_IDX16-NEXT: Loop %bb11: Unpredictable symbolic max backedge-taken count.
155136
; PTR16_IDX16-NEXT: Loop %bb11: Unpredictable predicated backedge-taken count.
156137
;
157-
; PTR16_IDX32-LABEL: 'trunc_ptr_to_i32'
158-
; PTR16_IDX32-NEXT: Classifying expressions for: @trunc_ptr_to_i32
159-
; PTR16_IDX32-NEXT: %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ]
160-
; PTR16_IDX32-NEXT: --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
161-
; PTR16_IDX32-NEXT: %tmp12 = getelementptr i8, ptr %arg, i32 ptrtoint (ptr @global to i32)
162-
; PTR16_IDX32-NEXT: --> (ptrtoint (ptr @global to i32) + %arg) U: [0,131071) S: [0,131071) Exits: (ptrtoint (ptr @global to i32) + %arg) LoopDispositions: { %bb11: Invariant }
163-
; PTR16_IDX32-NEXT: %tmp13 = bitcast ptr %tmp12 to ptr
164-
; PTR16_IDX32-NEXT: --> (ptrtoint (ptr @global to i32) + %arg) U: [0,131071) S: [0,131071) Exits: (ptrtoint (ptr @global to i32) + %arg) LoopDispositions: { %bb11: Invariant }
165-
; PTR16_IDX32-NEXT: %tmp14 = load i32, ptr %tmp13, align 4
166-
; PTR16_IDX32-NEXT: --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant }
167-
; PTR16_IDX32-NEXT: %tmp18 = add i32 %tmp, 2
168-
; PTR16_IDX32-NEXT: --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
169-
; PTR16_IDX32-NEXT: Determining loop execution counts for: @trunc_ptr_to_i32
170-
; PTR16_IDX32-NEXT: Loop %bb11: Unpredictable backedge-taken count.
171-
; PTR16_IDX32-NEXT: Loop %bb11: Unpredictable constant max backedge-taken count.
172-
; PTR16_IDX32-NEXT: Loop %bb11: Unpredictable symbolic max backedge-taken count.
173-
; PTR16_IDX32-NEXT: Loop %bb11: Unpredictable predicated backedge-taken count.
174-
;
175138
bb:
176139
br label %bb11
177140

@@ -245,24 +208,6 @@ define hidden ptr @trunc_ptr_to_i128(ptr %arg, ptr %arg10) {
245208
; PTR16_IDX16-NEXT: Loop %bb11: Unpredictable symbolic max backedge-taken count.
246209
; PTR16_IDX16-NEXT: Loop %bb11: Unpredictable predicated backedge-taken count.
247210
;
248-
; PTR16_IDX32-LABEL: 'trunc_ptr_to_i128'
249-
; PTR16_IDX32-NEXT: Classifying expressions for: @trunc_ptr_to_i128
250-
; PTR16_IDX32-NEXT: %tmp = phi i32 [ 0, %bb ], [ %tmp18, %bb17 ]
251-
; PTR16_IDX32-NEXT: --> {0,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
252-
; PTR16_IDX32-NEXT: %tmp12 = getelementptr i8, ptr %arg, i128 ptrtoint (ptr @global to i128)
253-
; PTR16_IDX32-NEXT: --> ((trunc i128 ptrtoint (ptr @global to i128) to i32) + %arg) U: [0,131071) S: [0,131071) Exits: ((trunc i128 ptrtoint (ptr @global to i128) to i32) + %arg) LoopDispositions: { %bb11: Invariant }
254-
; PTR16_IDX32-NEXT: %tmp13 = bitcast ptr %tmp12 to ptr
255-
; PTR16_IDX32-NEXT: --> ((trunc i128 ptrtoint (ptr @global to i128) to i32) + %arg) U: [0,131071) S: [0,131071) Exits: ((trunc i128 ptrtoint (ptr @global to i128) to i32) + %arg) LoopDispositions: { %bb11: Invariant }
256-
; PTR16_IDX32-NEXT: %tmp14 = load i32, ptr %tmp13, align 4
257-
; PTR16_IDX32-NEXT: --> %tmp14 U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %bb11: Variant }
258-
; PTR16_IDX32-NEXT: %tmp18 = add i32 %tmp, 2
259-
; PTR16_IDX32-NEXT: --> {2,+,2}<%bb11> U: [0,-1) S: [-2147483648,2147483647) Exits: <<Unknown>> LoopDispositions: { %bb11: Computable }
260-
; PTR16_IDX32-NEXT: Determining loop execution counts for: @trunc_ptr_to_i128
261-
; PTR16_IDX32-NEXT: Loop %bb11: Unpredictable backedge-taken count.
262-
; PTR16_IDX32-NEXT: Loop %bb11: Unpredictable constant max backedge-taken count.
263-
; PTR16_IDX32-NEXT: Loop %bb11: Unpredictable symbolic max backedge-taken count.
264-
; PTR16_IDX32-NEXT: Loop %bb11: Unpredictable predicated backedge-taken count.
265-
;
266211
bb:
267212
br label %bb11
268213

@@ -319,18 +264,6 @@ define void @zext_ptr_to_i32(i32 %arg, i32 %arg6) {
319264
; PTR16_IDX16-NEXT: Loop %bb7: Unpredictable symbolic max backedge-taken count.
320265
; PTR16_IDX16-NEXT: Loop %bb7: Unpredictable predicated backedge-taken count.
321266
;
322-
; PTR16_IDX32-LABEL: 'zext_ptr_to_i32'
323-
; PTR16_IDX32-NEXT: Classifying expressions for: @zext_ptr_to_i32
324-
; PTR16_IDX32-NEXT: %tmp = sub i32 %arg, ptrtoint (ptr @global to i32)
325-
; PTR16_IDX32-NEXT: --> ((-1 * ptrtoint (ptr @global to i32))<nsw> + %arg) U: full-set S: full-set Exits: ((-1 * ptrtoint (ptr @global to i32))<nsw> + %arg) LoopDispositions: { %bb7: Invariant }
326-
; PTR16_IDX32-NEXT: %tmp9 = select i1 %tmp8, i16 0, i16 1
327-
; PTR16_IDX32-NEXT: --> %tmp9 U: [0,2) S: [0,2) Exits: <<Unknown>> LoopDispositions: { %bb7: Variant }
328-
; PTR16_IDX32-NEXT: Determining loop execution counts for: @zext_ptr_to_i32
329-
; PTR16_IDX32-NEXT: Loop %bb7: Unpredictable backedge-taken count.
330-
; PTR16_IDX32-NEXT: Loop %bb7: Unpredictable constant max backedge-taken count.
331-
; PTR16_IDX32-NEXT: Loop %bb7: Unpredictable symbolic max backedge-taken count.
332-
; PTR16_IDX32-NEXT: Loop %bb7: Unpredictable predicated backedge-taken count.
333-
;
334267
bb:
335268
br label %bb7
336269

@@ -382,18 +315,6 @@ define void @sext_to_i32(i32 %arg, i32 %arg6) {
382315
; PTR16_IDX16-NEXT: Loop %bb7: Unpredictable symbolic max backedge-taken count.
383316
; PTR16_IDX16-NEXT: Loop %bb7: Unpredictable predicated backedge-taken count.
384317
;
385-
; PTR16_IDX32-LABEL: 'sext_to_i32'
386-
; PTR16_IDX32-NEXT: Classifying expressions for: @sext_to_i32
387-
; PTR16_IDX32-NEXT: %tmp = sub i32 %arg, sext (i16 ptrtoint (ptr @global to i16) to i32)
388-
; PTR16_IDX32-NEXT: --> ((-1 * (sext i16 ptrtoint (ptr @global to i16) to i32))<nsw> + %arg) U: full-set S: full-set Exits: ((-1 * (sext i16 ptrtoint (ptr @global to i16) to i32))<nsw> + %arg) LoopDispositions: { %bb7: Invariant }
389-
; PTR16_IDX32-NEXT: %tmp9 = select i1 %tmp8, i16 0, i16 1
390-
; PTR16_IDX32-NEXT: --> %tmp9 U: [0,2) S: [0,2) Exits: <<Unknown>> LoopDispositions: { %bb7: Variant }
391-
; PTR16_IDX32-NEXT: Determining loop execution counts for: @sext_to_i32
392-
; PTR16_IDX32-NEXT: Loop %bb7: Unpredictable backedge-taken count.
393-
; PTR16_IDX32-NEXT: Loop %bb7: Unpredictable constant max backedge-taken count.
394-
; PTR16_IDX32-NEXT: Loop %bb7: Unpredictable symbolic max backedge-taken count.
395-
; PTR16_IDX32-NEXT: Loop %bb7: Unpredictable predicated backedge-taken count.
396-
;
397318
bb:
398319
br label %bb7
399320

@@ -463,24 +384,6 @@ define i64 @sext_like_noop(i32 %n) {
463384
; PTR16_IDX16-NEXT: Predicates:
464385
; PTR16_IDX16: Loop %for.body: Trip multiple is 1
465386
;
466-
; PTR16_IDX32-LABEL: 'sext_like_noop'
467-
; PTR16_IDX32-NEXT: Classifying expressions for: @sext_like_noop
468-
; PTR16_IDX32-NEXT: %ii = sext i32 %i to i64
469-
; PTR16_IDX32-NEXT: --> (sext i32 {1,+,1}<nuw><%for.body> to i64) U: [-2147483648,2147483648) S: [-2147483648,2147483648) --> (-1 + (zext i32 ptrtoint (ptr @sext_like_noop to i32) to i64))<nsw> U: [-1,65535) S: [-1,65535)
470-
; PTR16_IDX32-NEXT: %div = sdiv i64 55555, %ii
471-
; PTR16_IDX32-NEXT: --> %div U: full-set S: full-set
472-
; PTR16_IDX32-NEXT: %i = phi i32 [ %inc, %for.body ], [ 1, %entry ]
473-
; PTR16_IDX32-NEXT: --> {1,+,1}<nuw><%for.body> U: [1,0) S: [1,0) Exits: (-1 + ptrtoint (ptr @sext_like_noop to i32))<nsw> LoopDispositions: { %for.body: Computable }
474-
; PTR16_IDX32-NEXT: %inc = add nuw i32 %i, 1
475-
; PTR16_IDX32-NEXT: --> {2,+,1}<nuw><%for.body> U: [2,0) S: [2,0) Exits: ptrtoint (ptr @sext_like_noop to i32) LoopDispositions: { %for.body: Computable }
476-
; PTR16_IDX32-NEXT: Determining loop execution counts for: @sext_like_noop
477-
; PTR16_IDX32-NEXT: Loop %for.body: backedge-taken count is (-2 + ptrtoint (ptr @sext_like_noop to i32))<nsw>
478-
; PTR16_IDX32-NEXT: Loop %for.body: constant max backedge-taken count is -1
479-
; PTR16_IDX32-NEXT: Loop %for.body: symbolic max backedge-taken count is (-2 + ptrtoint (ptr @sext_like_noop to i32))<nsw>
480-
; PTR16_IDX32-NEXT: Loop %for.body: Predicated backedge-taken count is (-2 + ptrtoint (ptr @sext_like_noop to i32))<nsw>
481-
; PTR16_IDX32-NEXT: Predicates:
482-
; PTR16_IDX32: Loop %for.body: Trip multiple is 1
483-
;
484387
entry:
485388
%cmp6 = icmp sgt i32 %n, 1
486389
br label %for.body
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
2+
target datalayout = "p:64:64:64:128"
3+
; CHECK: Index width cannot be larger than pointer width

llvm/test/Transforms/InferAlignment/ptrmask.ll

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
22
; RUN: opt < %s -passes=infer-alignment -S | FileCheck %s
33

4-
target datalayout = "p1:64:64:64:32-p2:64:64:64:128"
4+
target datalayout = "p1:64:64:64:32"
55

66
; ------------------------------------------------------------------------------
77
; load instructions
@@ -88,18 +88,5 @@ define i8 @smaller_index_type(ptr addrspace(1) %ptr) {
8888
ret i8 %load
8989
}
9090

91-
define i8 @larger_index_type(ptr addrspace(2) %ptr) {
92-
; CHECK-LABEL: define i8 @larger_index_type
93-
; CHECK-SAME: (ptr addrspace(2) [[PTR:%.*]]) {
94-
; CHECK-NEXT: [[PTR2:%.*]] = call ptr addrspace(2) @llvm.ptrmask.p2.i128(ptr addrspace(2) [[PTR]], i128 -4)
95-
; CHECK-NEXT: [[LOAD:%.*]] = load i8, ptr addrspace(2) [[PTR2]], align 4
96-
; CHECK-NEXT: ret i8 [[LOAD]]
97-
;
98-
%ptr2 = call ptr addrspace(2) @llvm.ptrmask.p2.i128(ptr addrspace(2) %ptr, i128 -4)
99-
%load = load i8, ptr addrspace(2) %ptr2, align 1
100-
ret i8 %load
101-
}
102-
10391
declare ptr @llvm.ptrmask.p0.i64(ptr, i64)
10492
declare ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1), i32)
105-
declare ptr addrspace(2) @llvm.ptrmask.p2.i128(ptr addrspace(2), i128)

mlir/test/Target/LLVMIR/Import/data-layout.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ target datalayout = "e-m:e-p270:32:64-p271:32:32-p272:64:64-i64:64-f80:128-n8:16
3636
; CHECK: dlti.dl_spec =
3737
; CHECK: #dlti.dl_spec<
3838
; CHECK-DAG: #dlti.dl_entry<"dlti.endianness", "big">
39-
; CHECK-DAG: #dlti.dl_entry<!llvm.ptr<270>, dense<[16, 32, 64, 128]> : vector<4xi32>>
39+
; CHECK-DAG: #dlti.dl_entry<!llvm.ptr<270>, dense<[16, 32, 64, 8]> : vector<4xi32>>
4040
; CHECK-DAG: #dlti.dl_entry<!llvm.ptr<271>, dense<[16, 32, 64, 16]> : vector<4xi32>>
4141
; CHECK-DAG: #dlti.dl_entry<"dlti.alloca_memory_space", 1 : ui32>
4242
; CHECK-DAG: #dlti.dl_entry<i64, dense<[64, 128]> : vector<2xi32>>
43-
target datalayout = "A1-E-p270:16:32:64:128-p271:16:32:64-i64:64:128"
43+
target datalayout = "A1-E-p270:16:32:64:8-p271:16:32:64-i64:64:128"
4444

4545
; // -----
4646

mlir/test/Target/LLVMIR/data-layout.mlir

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
// CHECK: i64:64:128
88
// CHECK: f80:128:256
99
// CHECK: p0:32:64:128
10-
// CHECK: p1:32:32:32:64
10+
// CHECK: p1:32:32:32:16
1111
module attributes {dlti.dl_spec = #dlti.dl_spec<
1212
#dlti.dl_entry<"dlti.endianness", "big">,
1313
#dlti.dl_entry<"dlti.alloca_memory_space", 4 : ui32>,
@@ -16,7 +16,7 @@ module attributes {dlti.dl_spec = #dlti.dl_spec<
1616
#dlti.dl_entry<i64, dense<[64,128]> : vector<2xi32>>,
1717
#dlti.dl_entry<f80, dense<[128,256]> : vector<2xi32>>,
1818
#dlti.dl_entry<!llvm.ptr, dense<[32,64,128]> : vector<3xi32>>,
19-
#dlti.dl_entry<!llvm.ptr<1>, dense<[32,32,32,64]> : vector<4xi32>>
19+
#dlti.dl_entry<!llvm.ptr<1>, dense<[32,32,32,16]> : vector<4xi32>>
2020
>} {
2121
llvm.func @foo() {
2222
llvm.return

0 commit comments

Comments
 (0)