[clang] [flang] [llvm] [InstCombine] Canonicalize GEP source element types (PR #180745)

via cfe-commits cfe-commits at lists.llvm.org
Fri Feb 13 03:57:53 PST 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-powerpc

Author: Nikita Popov (nikic)

<details>
<summary>Changes</summary>

Canonicalize GEP source element types from `%T` to `[sizeof(%T) x i8]`.

This is intended to flush out any remaining places that rely on GEP element types, as part of the `ptradd` migration. The impact of this change is expected to be fairly minimal (we might enable a few more hoist/sink style folds that depend on equal GEP types).

This causes a small compile-time regression: https://llvm-compile-time-tracker.com/compare.php?from=59a8bd0a746360380f8579a72f6be6ebe8a8e1b0&to=0656da14cc57cceeceab1bdceb5938a98635933f&stat=instructions%3Au

---

Patch is 1.18 MiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/180745.diff


188 Files Affected:

- (modified) clang/test/CodeGen/allow-ubsan-check.c (+3-3) 
- (modified) clang/test/CodeGen/attr-counted-by-for-pointers.c (+12-12) 
- (modified) clang/test/CodeGen/attr-counted-by.c (+77-77) 
- (modified) clang/test/CodeGen/union-tbaa1.c (+4-4) 
- (modified) clang/test/OpenMP/taskloop_strictmodifier_codegen.cpp (+2-2) 
- (modified) flang/test/Integration/unroll-loops.f90 (+2-2) 
- (modified) flang/test/Lower/HLFIR/unroll-loops.fir (+2-2) 
- (modified) llvm/lib/Transforms/InstCombine/InstructionCombining.cpp (+18) 
- (modified) llvm/test/Analysis/BasicAA/featuretest.ll (+5-5) 
- (modified) llvm/test/CodeGen/AArch64/sme-aarch64-svcount-O3.ll (+1-1) 
- (modified) llvm/test/CodeGen/AMDGPU/amdgpu-uniform-intrinsic-combine.ll (+6-6) 
- (modified) llvm/test/CodeGen/AMDGPU/vector-alloca-addrspacecast.ll (+1-1) 
- (modified) llvm/test/CodeGen/Hexagon/autohvx/vector-align-tbaa.ll (+9-9) 
- (modified) llvm/test/DebugInfo/Generic/instcombine-phi.ll (+1-1) 
- (modified) llvm/test/Transforms/InstCombine/2006-12-15-Range-Test.ll (+2-2) 
- (modified) llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-gatherscatter.ll (+4-4) 
- (modified) llvm/test/Transforms/InstCombine/AMDGPU/memcpy-from-constant.ll (+2-2) 
- (modified) llvm/test/Transforms/InstCombine/align-addr.ll (+2-2) 
- (modified) llvm/test/Transforms/InstCombine/and-or-icmps.ll (+2-2) 
- (modified) llvm/test/Transforms/InstCombine/array.ll (+29-29) 
- (modified) llvm/test/Transforms/InstCombine/assume-loop-align.ll (+2-2) 
- (modified) llvm/test/Transforms/InstCombine/canonicalize-gep-constglob.ll (+4-4) 
- (modified) llvm/test/Transforms/InstCombine/canonicalize-gep-mul.ll (+1-1) 
- (modified) llvm/test/Transforms/InstCombine/cast.ll (+1-1) 
- (modified) llvm/test/Transforms/InstCombine/cast_phi.ll (+4-4) 
- (modified) llvm/test/Transforms/InstCombine/cast_ptr.ll (+7-7) 
- (modified) llvm/test/Transforms/InstCombine/constant-fold-address-space-pointer.ll (+1-1) 
- (modified) llvm/test/Transforms/InstCombine/dependent-ivs.ll (+1-1) 
- (modified) llvm/test/Transforms/InstCombine/fmul.ll (+1-1) 
- (modified) llvm/test/Transforms/InstCombine/gep-addrspace.ll (+2-2) 
- (modified) llvm/test/Transforms/InstCombine/gep-alias.ll (+1-1) 
- (modified) llvm/test/Transforms/InstCombine/gep-canonicalize-constant-indices.ll (+20-20) 
- (modified) llvm/test/Transforms/InstCombine/gep-combine-loop-invariant.ll (+8-8) 
- (modified) llvm/test/Transforms/InstCombine/gep-custom-dl.ll (+4-4) 
- (modified) llvm/test/Transforms/InstCombine/gep-fold-chained-const-select.ll (+1-1) 
- (modified) llvm/test/Transforms/InstCombine/gep-merge-constant-indices.ll (+4-4) 
- (modified) llvm/test/Transforms/InstCombine/gep-sext.ll (+4-4) 
- (modified) llvm/test/Transforms/InstCombine/gep-srem-to-and-deref.ll (+1-1) 
- (modified) llvm/test/Transforms/InstCombine/gep-vector-indices.ll (+8-8) 
- (modified) llvm/test/Transforms/InstCombine/gep-vector.ll (+16-16) 
- (modified) llvm/test/Transforms/InstCombine/gepofconstgepi8.ll (+29-29) 
- (modified) llvm/test/Transforms/InstCombine/gepphigep.ll (+10-10) 
- (modified) llvm/test/Transforms/InstCombine/getelementptr.ll (+43-43) 
- (modified) llvm/test/Transforms/InstCombine/icmp-custom-dl.ll (+2-2) 
- (modified) llvm/test/Transforms/InstCombine/icmp-gep.ll (+18-18) 
- (modified) llvm/test/Transforms/InstCombine/indexed-gep-compares.ll (+3-3) 
- (modified) llvm/test/Transforms/InstCombine/known-phi-recurse.ll (+1-1) 
- (modified) llvm/test/Transforms/InstCombine/load-bitcast-select.ll (+2-2) 
- (modified) llvm/test/Transforms/InstCombine/load-cmp.ll (+10-10) 
- (modified) llvm/test/Transforms/InstCombine/load.ll (+4-4) 
- (modified) llvm/test/Transforms/InstCombine/loadstore-alignment.ll (+6-6) 
- (modified) llvm/test/Transforms/InstCombine/loadstore-metadata.ll (+2-2) 
- (modified) llvm/test/Transforms/InstCombine/masked_intrinsics-inseltpoison.ll (+5-5) 
- (modified) llvm/test/Transforms/InstCombine/masked_intrinsics.ll (+5-5) 
- (modified) llvm/test/Transforms/InstCombine/mem-gep-zidx.ll (+1-1) 
- (modified) llvm/test/Transforms/InstCombine/memcpy-addrspace.ll (+16-16) 
- (modified) llvm/test/Transforms/InstCombine/memcpy-from-global.ll (+5-5) 
- (modified) llvm/test/Transforms/InstCombine/multi-size-address-space-pointer.ll (+2-2) 
- (modified) llvm/test/Transforms/InstCombine/narrow.ll (+2-2) 
- (modified) llvm/test/Transforms/InstCombine/opaque-ptr.ll (+9-9) 
- (modified) llvm/test/Transforms/InstCombine/phi.ll (+1-1) 
- (modified) llvm/test/Transforms/InstCombine/pr38984-inseltpoison.ll (+2-2) 
- (modified) llvm/test/Transforms/InstCombine/pr38984.ll (+2-2) 
- (modified) llvm/test/Transforms/InstCombine/pr58901.ll (+3-3) 
- (modified) llvm/test/Transforms/InstCombine/ptrtoint-nullgep.ll (+2-2) 
- (modified) llvm/test/Transforms/InstCombine/remove-loop-phi-multiply-by-zero.ll (+10-10) 
- (modified) llvm/test/Transforms/InstCombine/scalable-select.ll (+2-2) 
- (modified) llvm/test/Transforms/InstCombine/select-gep.ll (+21-21) 
- (modified) llvm/test/Transforms/InstCombine/shift.ll (+6-6) 
- (modified) llvm/test/Transforms/InstCombine/sink_instruction.ll (+3-3) 
- (modified) llvm/test/Transforms/InstCombine/store.ll (+4-4) 
- (modified) llvm/test/Transforms/InstCombine/sub-gep.ll (+10-10) 
- (modified) llvm/test/Transforms/InstCombine/vec_demanded_elts-inseltpoison.ll (+7-7) 
- (modified) llvm/test/Transforms/InstCombine/vec_demanded_elts.ll (+7-7) 
- (modified) llvm/test/Transforms/InstCombine/vec_phi_extract-inseltpoison.ll (+3-3) 
- (modified) llvm/test/Transforms/InstCombine/vec_phi_extract.ll (+3-3) 
- (modified) llvm/test/Transforms/InstCombine/vector_gep1-inseltpoison.ll (+1-1) 
- (modified) llvm/test/Transforms/InstCombine/vector_gep1.ll (+1-1) 
- (modified) llvm/test/Transforms/InstCombine/vector_gep2.ll (+2-2) 
- (modified) llvm/test/Transforms/InstCombine/vectorgep-crash.ll (+3-3) 
- (modified) llvm/test/Transforms/InstCombine/wcslen-1.ll (+6-6) 
- (modified) llvm/test/Transforms/InstCombine/wcslen-3.ll (+2-2) 
- (modified) llvm/test/Transforms/InstCombine/wcslen-5.ll (+8-8) 
- (modified) llvm/test/Transforms/LoopSimplify/merge-exits.ll (+4-4) 
- (modified) llvm/test/Transforms/LoopUnroll/AArch64/runtime-unroll-generic.ll (+24-24) 
- (modified) llvm/test/Transforms/LoopUnroll/WebAssembly/basic-unrolling.ll (+20-20) 
- (modified) llvm/test/Transforms/LoopUnroll/runtime-multiexit-heuristic.ll (+21-21) 
- (modified) llvm/test/Transforms/LoopUnroll/runtime-unroll-remainder.ll (+14-14) 
- (modified) llvm/test/Transforms/LoopVectorize/AArch64/aarch64-predication.ll (+3-1) 
- (modified) llvm/test/Transforms/LoopVectorize/AArch64/sve-cond-inv-loads.ll (+7-7) 
- (modified) llvm/test/Transforms/LoopVectorize/AArch64/sve-gather-scatter.ll (+10-10) 
- (modified) llvm/test/Transforms/LoopVectorize/AArch64/sve-inductions.ll (+2-2) 
- (modified) llvm/test/Transforms/LoopVectorize/AArch64/sve-interleaved-accesses.ll (+49-49) 
- (modified) llvm/test/Transforms/LoopVectorize/AArch64/sve-large-strides.ll (+3-3) 
- (modified) llvm/test/Transforms/LoopVectorize/AArch64/sve-masked-loadstore.ll (+2-2) 
- (modified) llvm/test/Transforms/LoopVectorize/AArch64/sve-tail-folding-overflow-checks.ll (+4-4) 
- (modified) llvm/test/Transforms/LoopVectorize/AArch64/sve-vector-reverse.ll (+16-16) 
- (modified) llvm/test/Transforms/LoopVectorize/AArch64/sve-vfabi.ll (+5-5) 
- (modified) llvm/test/Transforms/LoopVectorize/AArch64/sve-widen-phi.ll (+8-8) 
- (modified) llvm/test/Transforms/LoopVectorize/AArch64/sve2-histcnt-epilogue.ll (+6-6) 
- (modified) llvm/test/Transforms/LoopVectorize/AArch64/sve2-histcnt-no-scalar-interleave.ll (+2-2) 
- (modified) llvm/test/Transforms/LoopVectorize/AArch64/sve2-histcnt-too-many-deps.ll (+10-10) 
- (modified) llvm/test/Transforms/LoopVectorize/AArch64/sve2-histcnt.ll (+80-41) 
- (modified) llvm/test/Transforms/LoopVectorize/AArch64/uniform-args-call-variants.ll (+18-18) 
- (modified) llvm/test/Transforms/LoopVectorize/AArch64/vector-reverse-mask4.ll (+4-4) 
- (modified) llvm/test/Transforms/LoopVectorize/AMDGPU/packed-math.ll (+3-3) 
- (modified) llvm/test/Transforms/LoopVectorize/ARM/mve-reduction-predselect.ll (+20-20) 
- (modified) llvm/test/Transforms/LoopVectorize/ARM/mve-reductions-interleave.ll (+6-6) 
- (modified) llvm/test/Transforms/LoopVectorize/ARM/mve-reductions.ll (+47-47) 
- (modified) llvm/test/Transforms/LoopVectorize/ARM/tail-fold-multiple-icmps.ll (+2-2) 
- (modified) llvm/test/Transforms/LoopVectorize/PowerPC/vsx-tsvc-s173.ll (+1-1) 
- (modified) llvm/test/Transforms/LoopVectorize/PowerPC/widened-massv-call.ll (+1-1) 
- (modified) llvm/test/Transforms/LoopVectorize/PowerPC/widened-massv-vfabi-attr.ll (+1-1) 
- (modified) llvm/test/Transforms/LoopVectorize/SystemZ/addressing.ll (+3-3) 
- (modified) llvm/test/Transforms/LoopVectorize/X86/interleaving.ll (+6-6) 
- (modified) llvm/test/Transforms/LoopVectorize/X86/metadata-enable.ll (+26-26) 
- (modified) llvm/test/Transforms/LoopVectorize/X86/parallel-loops.ll (+29-29) 
- (modified) llvm/test/Transforms/LoopVectorize/X86/small-size.ll (+19-19) 
- (modified) llvm/test/Transforms/LoopVectorize/X86/x86-interleaved-store-accesses-with-gaps.ll (+34-34) 
- (modified) llvm/test/Transforms/LoopVectorize/bsd_regex.ll (+4-4) 
- (modified) llvm/test/Transforms/LoopVectorize/extract-last-veclane.ll (+8-8) 
- (modified) llvm/test/Transforms/LoopVectorize/float-induction.ll (+91-91) 
- (modified) llvm/test/Transforms/LoopVectorize/forked-pointers.ll (+12-12) 
- (modified) llvm/test/Transforms/LoopVectorize/gep_with_bitcast.ll (+1-1) 
- (modified) llvm/test/Transforms/LoopVectorize/histograms.ll (+5-5) 
- (modified) llvm/test/Transforms/LoopVectorize/if-conversion-nest.ll (+8-8) 
- (modified) llvm/test/Transforms/LoopVectorize/if-conversion.ll (+6-6) 
- (modified) llvm/test/Transforms/LoopVectorize/induction.ll (+163-163) 
- (modified) llvm/test/Transforms/LoopVectorize/interleaved-accesses-2.ll (+2-2) 
- (modified) llvm/test/Transforms/LoopVectorize/interleaved-accesses-pred-stores.ll (+18-18) 
- (modified) llvm/test/Transforms/LoopVectorize/interleaved-accesses.ll (+86-86) 
- (modified) llvm/test/Transforms/LoopVectorize/invariant-store-vectorization-2.ll (+7-7) 
- (modified) llvm/test/Transforms/LoopVectorize/invariant-store-vectorization.ll (+16-16) 
- (modified) llvm/test/Transforms/LoopVectorize/loop-scalars.ll (+18-18) 
- (modified) llvm/test/Transforms/LoopVectorize/non-const-n.ll (+3-3) 
- (modified) llvm/test/Transforms/LoopVectorize/phi-cost.ll (+8-8) 
- (modified) llvm/test/Transforms/LoopVectorize/reduction-inloop-cond.ll (+84-84) 
- (modified) llvm/test/Transforms/LoopVectorize/reduction-inloop-min-max.ll (+6-6) 
- (modified) llvm/test/Transforms/LoopVectorize/reduction-inloop-pred.ll (+90-90) 
- (modified) llvm/test/Transforms/LoopVectorize/reduction-inloop-uf4.ll (+35-35) 
- (modified) llvm/test/Transforms/LoopVectorize/reduction-predselect.ll (+68-68) 
- (modified) llvm/test/Transforms/LoopVectorize/reduction.ll (+50-50) 
- (modified) llvm/test/Transforms/LoopVectorize/runtime-check.ll (+31-31) 
- (modified) llvm/test/Transforms/LoopVectorize/scalable-inductions.ll (+16-16) 
- (modified) llvm/test/Transforms/LoopVectorize/scalar_after_vectorization.ll (+1-1) 
- (modified) llvm/test/Transforms/LoopVectorize/trunc-reductions.ll (+6-6) 
- (modified) llvm/test/Transforms/LoopVectorize/uniform-args-call-variants.ll (+8-8) 
- (modified) llvm/test/Transforms/LoopVectorize/vector-geps.ll (+6-6) 
- (modified) llvm/test/Transforms/LoopVersioningLICM/loopversioningLICM1.ll (+3-3) 
- (modified) llvm/test/Transforms/LowerMatrixIntrinsics/multiply-fused-loops.ll (+12-12) 
- (modified) llvm/test/Transforms/PhaseOrdering/AArch64/block_scaling_decompr_8bit.ll (+2-2) 
- (modified) llvm/test/Transforms/PhaseOrdering/AArch64/constraint-elimination-placement.ll (+1-1) 
- (modified) llvm/test/Transforms/PhaseOrdering/AArch64/extra-unroll-simplifications.ll (+14-14) 
- (modified) llvm/test/Transforms/PhaseOrdering/AArch64/hoist-load-from-vector-loop.ll (+7-7) 
- (modified) llvm/test/Transforms/PhaseOrdering/AArch64/hoist-runtime-checks.ll (+5-5) 
- (modified) llvm/test/Transforms/PhaseOrdering/AArch64/hoisting-sinking-required-for-vectorization.ll (+10-10) 
- (modified) llvm/test/Transforms/PhaseOrdering/AArch64/indvars-vectorization.ll (+4-4) 
- (modified) llvm/test/Transforms/PhaseOrdering/AArch64/interleave_vec.ll (+44-44) 
- (modified) llvm/test/Transforms/PhaseOrdering/AArch64/interleavevectorization.ll (+15-15) 
- (modified) llvm/test/Transforms/PhaseOrdering/AArch64/loopflatten.ll (+1-1) 
- (modified) llvm/test/Transforms/PhaseOrdering/AArch64/matrix-extract-insert.ll (+23-23) 
- (modified) llvm/test/Transforms/PhaseOrdering/AArch64/peel-multiple-unreachable-exits-for-vectorization.ll (+11-11) 
- (modified) llvm/test/Transforms/PhaseOrdering/AArch64/predicated-reduction.ll (+4-4) 
- (modified) llvm/test/Transforms/PhaseOrdering/AArch64/reduce_submuladd.ll (+12-12) 
- (modified) llvm/test/Transforms/PhaseOrdering/AArch64/sinking-vs-if-conversion.ll (+4-4) 
- (modified) llvm/test/Transforms/PhaseOrdering/SystemZ/sub-xor.ll (+24-24) 
- (modified) llvm/test/Transforms/PhaseOrdering/X86/earlycse-after-simplifycfg-two-entry-phi-node-folding.ll (+1-1) 
- (modified) llvm/test/Transforms/PhaseOrdering/X86/excessive-unrolling.ll (+6-6) 
- (modified) llvm/test/Transforms/PhaseOrdering/X86/hoist-load-of-baseptr.ll (+5-5) 
- (modified) llvm/test/Transforms/PhaseOrdering/X86/merge-functions2.ll (+1-1) 
- (modified) llvm/test/Transforms/PhaseOrdering/X86/merge-functions3.ll (+1-1) 
- (modified) llvm/test/Transforms/PhaseOrdering/X86/pixel-splat.ll (+2-2) 
- (modified) llvm/test/Transforms/PhaseOrdering/X86/pr88239.ll (+2-2) 
- (modified) llvm/test/Transforms/PhaseOrdering/X86/preserve-access-group.ll (+12-12) 
- (modified) llvm/test/Transforms/PhaseOrdering/X86/simplifycfg-late.ll (+1-1) 
- (modified) llvm/test/Transforms/PhaseOrdering/X86/speculation-vs-tbaa.ll (+3-3) 
- (modified) llvm/test/Transforms/PhaseOrdering/X86/spurious-peeling.ll (+8-8) 
- (modified) llvm/test/Transforms/PhaseOrdering/X86/vdiv-nounroll.ll (+1-1) 
- (modified) llvm/test/Transforms/PhaseOrdering/X86/vdiv.ll (+31-30) 
- (modified) llvm/test/Transforms/PhaseOrdering/gvn-replacement-vs-hoist.ll (+2-2) 
- (modified) llvm/test/Transforms/PhaseOrdering/loop-access-checks.ll (+3-3) 
- (modified) llvm/test/Transforms/PhaseOrdering/loop-vectorize-bfi.ll (+1-1) 
- (modified) llvm/test/Transforms/PhaseOrdering/lto-argpromotion-ipsccp.ll (+1-1) 
- (modified) llvm/test/Transforms/PhaseOrdering/lto-licm.ll (+1-1) 
- (modified) llvm/test/Transforms/PhaseOrdering/scev-custom-dl.ll (+7-7) 
- (modified) llvm/test/Transforms/PhaseOrdering/simplifycfg-options.ll (+2-2) 
- (modified) llvm/test/Transforms/SimpleLoopUnswitch/AMDGPU/uniform-unswitch.ll (+1-1) 
- (modified) llvm/test/Transforms/SimplifyCFG/Hexagon/switch-to-lookup-table.ll (+1-1) 


``````````diff
diff --git a/clang/test/CodeGen/allow-ubsan-check.c b/clang/test/CodeGen/allow-ubsan-check.c
index 1e128854d6a75..da3bf3d4d72f5 100644
--- a/clang/test/CodeGen/allow-ubsan-check.c
+++ b/clang/test/CodeGen/allow-ubsan-check.c
@@ -204,7 +204,7 @@ void use(double*);
 // CHECK-NEXT:    [[TMP3:%.*]] = and i1 [[TMP1]], [[TMP2]], !nosanitize [[META6]]
 // CHECK-NEXT:    br i1 [[TMP3]], label %[[TRAP:.*]], label %[[BB4:.*]]
 // CHECK:       [[BB4]]:
-// CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[VLA]], i64 [[IDXPROM]]
+// CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [8 x i8], ptr [[VLA]], i64 [[IDXPROM]]
 // CHECK-NEXT:    [[TMP5:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !tbaa [[DOUBLE_TBAA9:![0-9]+]]
 // CHECK-NEXT:    ret double [[TMP5]]
 // CHECK:       [[TRAP]]:
@@ -223,7 +223,7 @@ void use(double*);
 // TR-NEXT:    [[TMP3:%.*]] = and i1 [[TMP1]], [[TMP2]], !nosanitize [[META6]]
 // TR-NEXT:    br i1 [[TMP3]], label %[[TRAP:.*]], label %[[BB4:.*]]
 // TR:       [[BB4]]:
-// TR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[VLA]], i64 [[IDXPROM]]
+// TR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [8 x i8], ptr [[VLA]], i64 [[IDXPROM]]
 // TR-NEXT:    [[TMP5:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !tbaa [[DOUBLE_TBAA9:![0-9]+]]
 // TR-NEXT:    ret double [[TMP5]]
 // TR:       [[TRAP]]:
@@ -242,7 +242,7 @@ void use(double*);
 // REC-NEXT:    [[TMP3:%.*]] = and i1 [[TMP1]], [[TMP2]], !nosanitize [[META6]]
 // REC-NEXT:    br i1 [[TMP3]], label %[[TRAP:.*]], label %[[BB4:.*]]
 // REC:       [[BB4]]:
-// REC-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[VLA]], i64 [[IDXPROM]]
+// REC-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [8 x i8], ptr [[VLA]], i64 [[IDXPROM]]
 // REC-NEXT:    [[TMP5:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !tbaa [[DOUBLE_TBAA9:![0-9]+]]
 // REC-NEXT:    ret double [[TMP5]]
 // REC:       [[TRAP]]:
diff --git a/clang/test/CodeGen/attr-counted-by-for-pointers.c b/clang/test/CodeGen/attr-counted-by-for-pointers.c
index 7b0be04b51a30..e667be2afedc6 100644
--- a/clang/test/CodeGen/attr-counted-by-for-pointers.c
+++ b/clang/test/CodeGen/attr-counted-by-for-pointers.c
@@ -44,7 +44,7 @@ struct annotated_ptr {
 // SANITIZE-WITH-ATTR-NEXT:    [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 8
 // SANITIZE-WITH-ATTR-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[BUF]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA8:![0-9]+]]
 // SANITIZE-WITH-ATTR-NEXT:    [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64
-// SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds ptr, ptr [[TMP4]], i64 [[IDXPROM]]
+// SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [8 x i8], ptr [[TMP4]], i64 [[IDXPROM]]
 // SANITIZE-WITH-ATTR-NEXT:    store ptr [[VALUE]], ptr [[ARRAYIDX]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA14:![0-9]+]]
 // SANITIZE-WITH-ATTR-NEXT:    ret void
 //
@@ -54,7 +54,7 @@ struct annotated_ptr {
 // NO-SANITIZE-WITH-ATTR-NEXT:    [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 8
 // NO-SANITIZE-WITH-ATTR-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[BUF]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA6:![0-9]+]]
 // NO-SANITIZE-WITH-ATTR-NEXT:    [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64
-// NO-SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds ptr, ptr [[TMP0]], i64 [[IDXPROM]]
+// NO-SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [8 x i8], ptr [[TMP0]], i64 [[IDXPROM]]
 // NO-SANITIZE-WITH-ATTR-NEXT:    store ptr [[VALUE]], ptr [[ARRAYIDX]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA12:![0-9]+]]
 // NO-SANITIZE-WITH-ATTR-NEXT:    ret void
 //
@@ -64,7 +64,7 @@ struct annotated_ptr {
 // SANITIZE-WITHOUT-ATTR-NEXT:    [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 8
 // SANITIZE-WITHOUT-ATTR-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[BUF]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA6:![0-9]+]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64
-// SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds ptr, ptr [[TMP0]], i64 [[IDXPROM]]
+// SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [8 x i8], ptr [[TMP0]], i64 [[IDXPROM]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    store ptr [[VALUE]], ptr [[ARRAYIDX]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA12:![0-9]+]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    ret void
 //
@@ -74,7 +74,7 @@ struct annotated_ptr {
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 8
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[BUF]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA6:![0-9]+]]
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64
-// NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds ptr, ptr [[TMP0]], i64 [[IDXPROM]]
+// NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [8 x i8], ptr [[TMP0]], i64 [[IDXPROM]]
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    store ptr [[VALUE]], ptr [[ARRAYIDX]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA12:![0-9]+]]
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    ret void
 //
@@ -99,7 +99,7 @@ void test1(struct annotated_ptr *p, int index, struct foo *value) {
 // SANITIZE-WITH-ATTR-NEXT:    [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 8
 // SANITIZE-WITH-ATTR-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[BUF]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA8]]
 // SANITIZE-WITH-ATTR-NEXT:    [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64
-// SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds ptr, ptr [[TMP4]], i64 [[IDXPROM]]
+// SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [8 x i8], ptr [[TMP4]], i64 [[IDXPROM]]
 // SANITIZE-WITH-ATTR-NEXT:    store ptr [[VALUE]], ptr [[ARRAYIDX]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA14]]
 // SANITIZE-WITH-ATTR-NEXT:    ret void
 //
@@ -109,7 +109,7 @@ void test1(struct annotated_ptr *p, int index, struct foo *value) {
 // NO-SANITIZE-WITH-ATTR-NEXT:    [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 8
 // NO-SANITIZE-WITH-ATTR-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[BUF]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA6]]
 // NO-SANITIZE-WITH-ATTR-NEXT:    [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64
-// NO-SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds ptr, ptr [[TMP0]], i64 [[IDXPROM]]
+// NO-SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [8 x i8], ptr [[TMP0]], i64 [[IDXPROM]]
 // NO-SANITIZE-WITH-ATTR-NEXT:    store ptr [[VALUE]], ptr [[ARRAYIDX]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA12]]
 // NO-SANITIZE-WITH-ATTR-NEXT:    ret void
 //
@@ -119,7 +119,7 @@ void test1(struct annotated_ptr *p, int index, struct foo *value) {
 // SANITIZE-WITHOUT-ATTR-NEXT:    [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 8
 // SANITIZE-WITHOUT-ATTR-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[BUF]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA6]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64
-// SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds ptr, ptr [[TMP0]], i64 [[IDXPROM]]
+// SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [8 x i8], ptr [[TMP0]], i64 [[IDXPROM]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    store ptr [[VALUE]], ptr [[ARRAYIDX]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA12]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    ret void
 //
@@ -129,7 +129,7 @@ void test1(struct annotated_ptr *p, int index, struct foo *value) {
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 8
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[BUF]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA6]]
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64
-// NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds ptr, ptr [[TMP0]], i64 [[IDXPROM]]
+// NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [8 x i8], ptr [[TMP0]], i64 [[IDXPROM]]
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    store ptr [[VALUE]], ptr [[ARRAYIDX]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA12]]
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    ret void
 //
@@ -154,7 +154,7 @@ void test2(struct annotated_ptr *p, int index, struct foo *value) {
 // SANITIZE-WITH-ATTR-NEXT:    [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 8
 // SANITIZE-WITH-ATTR-NEXT:    [[TMP4:%.*]] = load ptr, ptr [[BUF]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA8]]
 // SANITIZE-WITH-ATTR-NEXT:    [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64
-// SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds ptr, ptr [[TMP4]], i64 [[IDXPROM]]
+// SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [8 x i8], ptr [[TMP4]], i64 [[IDXPROM]]
 // SANITIZE-WITH-ATTR-NEXT:    store ptr [[VALUE]], ptr [[ARRAYIDX]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA14]]
 // SANITIZE-WITH-ATTR-NEXT:    ret void
 //
@@ -164,7 +164,7 @@ void test2(struct annotated_ptr *p, int index, struct foo *value) {
 // NO-SANITIZE-WITH-ATTR-NEXT:    [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 8
 // NO-SANITIZE-WITH-ATTR-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[BUF]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA6]]
 // NO-SANITIZE-WITH-ATTR-NEXT:    [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64
-// NO-SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds ptr, ptr [[TMP0]], i64 [[IDXPROM]]
+// NO-SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [8 x i8], ptr [[TMP0]], i64 [[IDXPROM]]
 // NO-SANITIZE-WITH-ATTR-NEXT:    store ptr [[VALUE]], ptr [[ARRAYIDX]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA12]]
 // NO-SANITIZE-WITH-ATTR-NEXT:    ret void
 //
@@ -174,7 +174,7 @@ void test2(struct annotated_ptr *p, int index, struct foo *value) {
 // SANITIZE-WITHOUT-ATTR-NEXT:    [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 8
 // SANITIZE-WITHOUT-ATTR-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[BUF]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA6]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64
-// SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds ptr, ptr [[TMP0]], i64 [[IDXPROM]]
+// SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [8 x i8], ptr [[TMP0]], i64 [[IDXPROM]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    store ptr [[VALUE]], ptr [[ARRAYIDX]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA12]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    ret void
 //
@@ -184,7 +184,7 @@ void test2(struct annotated_ptr *p, int index, struct foo *value) {
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[BUF:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 8
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[BUF]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA6]]
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64
-// NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds ptr, ptr [[TMP0]], i64 [[IDXPROM]]
+// NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [8 x i8], ptr [[TMP0]], i64 [[IDXPROM]]
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    store ptr [[VALUE]], ptr [[ARRAYIDX]], align 8, !tbaa [[_ZTS3FOOPTR_TBAA12]]
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    ret void
 //
diff --git a/clang/test/CodeGen/attr-counted-by.c b/clang/test/CodeGen/attr-counted-by.c
index a51681a9c00fc..58d06f411b2c5 100644
--- a/clang/test/CodeGen/attr-counted-by.c
+++ b/clang/test/CodeGen/attr-counted-by.c
@@ -74,7 +74,7 @@ struct anon_struct {
 // SANITIZE-WITH-ATTR:       [[CONT3]]:
 // SANITIZE-WITH-ATTR-NEXT:    [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12
 // SANITIZE-WITH-ATTR-NEXT:    [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64
-// SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[ARRAY]], i64 [[IDXPROM]]
+// SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [4 x i8], ptr [[ARRAY]], i64 [[IDXPROM]]
 // SANITIZE-WITH-ATTR-NEXT:    store i32 [[VAL]], ptr [[ARRAYIDX]], align 4, !tbaa [[INT_TBAA2:![0-9]+]]
 // SANITIZE-WITH-ATTR-NEXT:    ret void
 //
@@ -83,7 +83,7 @@ struct anon_struct {
 // NO-SANITIZE-WITH-ATTR-NEXT:  [[ENTRY:.*:]]
 // NO-SANITIZE-WITH-ATTR-NEXT:    [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12
 // NO-SANITIZE-WITH-ATTR-NEXT:    [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64
-// NO-SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[ARRAY]], i64 [[IDXPROM]]
+// NO-SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [4 x i8], ptr [[ARRAY]], i64 [[IDXPROM]]
 // NO-SANITIZE-WITH-ATTR-NEXT:    store i32 [[VAL]], ptr [[ARRAYIDX]], align 4, !tbaa [[INT_TBAA2:![0-9]+]]
 // NO-SANITIZE-WITH-ATTR-NEXT:    ret void
 //
@@ -92,7 +92,7 @@ struct anon_struct {
 // SANITIZE-WITHOUT-ATTR-NEXT:  [[ENTRY:.*:]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12
 // SANITIZE-WITHOUT-ATTR-NEXT:    [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64
-// SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[ARRAY]], i64 [[IDXPROM]]
+// SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [4 x i8], ptr [[ARRAY]], i64 [[IDXPROM]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    store i32 [[VAL]], ptr [[ARRAYIDX]], align 4, !tbaa [[INT_TBAA2:![0-9]+]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    ret void
 //
@@ -101,7 +101,7 @@ struct anon_struct {
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:  [[ENTRY:.*:]]
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[IDXPROM:%.*]] = sext i32 [[INDEX]] to i64
-// NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[ARRAY]], i64 [[IDXPROM]]
+// NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [4 x i8], ptr [[ARRAY]], i64 [[IDXPROM]]
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    store i32 [[VAL]], ptr [[ARRAYIDX]], align 4, !tbaa [[INT_TBAA2:![0-9]+]]
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    ret void
 //
@@ -124,7 +124,7 @@ void test1(struct annotated *p, int index, int val) {
 // SANITIZE-WITH-ATTR-NEXT:    unreachable, !nosanitize [[META6]]
 // SANITIZE-WITH-ATTR:       [[CONT6]]:
 // SANITIZE-WITH-ATTR-NEXT:    [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12
-// SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[INDEX]]
+// SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [4 x i8], ptr [[ARRAY]], i64 [[INDEX]]
 // SANITIZE-WITH-ATTR-NEXT:    [[CONV:%.*]] = shl i32 [[COUNTED_BY_LOAD]], 2
 // SANITIZE-WITH-ATTR-NEXT:    store i32 [[CONV]], ptr [[ARRAYIDX]], align 4, !tbaa [[INT_TBAA2]]
 // SANITIZE-WITH-ATTR-NEXT:    ret void
@@ -137,7 +137,7 @@ void test1(struct annotated *p, int index, int val) {
 // NO-SANITIZE-WITH-ATTR-NEXT:    [[COUNTED_BY_LOAD:%.*]] = load i32, ptr [[COUNTED_BY_GEP]], align 4
 // NO-SANITIZE-WITH-ATTR-NEXT:    [[TMP0:%.*]] = tail call i32 @llvm.smax.i32(i32 [[COUNTED_BY_LOAD]], i32 0)
 // NO-SANITIZE-WITH-ATTR-NEXT:    [[CONV:%.*]] = shl i32 [[TMP0]], 2
-// NO-SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[INDEX]]
+// NO-SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [4 x i8], ptr [[ARRAY]], i64 [[INDEX]]
 // NO-SANITIZE-WITH-ATTR-NEXT:    store i32 [[CONV]], ptr [[ARRAYIDX]], align 4, !tbaa [[INT_TBAA2]]
 // NO-SANITIZE-WITH-ATTR-NEXT:    ret void
 //
@@ -145,7 +145,7 @@ void test1(struct annotated *p, int index, int val) {
 // SANITIZE-WITHOUT-ATTR-SAME: ptr noundef [[P:%.*]], i64 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // SANITIZE-WITHOUT-ATTR-NEXT:  [[ENTRY:.*:]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12
-// SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[INDEX]]
+// SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [4 x i8], ptr [[ARRAY]], i64 [[INDEX]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    store i32 -1, ptr [[ARRAYIDX]], align 4, !tbaa [[INT_TBAA2]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    ret void
 //
@@ -153,7 +153,7 @@ void test1(struct annotated *p, int index, int val) {
 // NO-SANITIZE-WITHOUT-ATTR-SAME: ptr noundef [[P:%.*]], i64 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:  [[ENTRY:.*:]]
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12
-// NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[INDEX]]
+// NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [4 x i8], ptr [[ARRAY]], i64 [[INDEX]]
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    store i32 -1, ptr [[ARRAYIDX]], align 4, !tbaa [[INT_TBAA2]]
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    ret void
 //
@@ -248,7 +248,7 @@ size_t test2_bdos_cast(struct annotated *p) {
 // SANITIZE-WITH-ATTR-NEXT:    unreachable, !nosanitize [[META6]]
 // SANITIZE-WITH-ATTR:       [[CONT3]]:
 // SANITIZE-WITH-ATTR-NEXT:    [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12
-// SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[INDEX]]
+// SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [4 x i8], ptr [[ARRAY]], i64 [[INDEX]]
 // SANITIZE-WITH-ATTR-NEXT:    store i32 -1, ptr [[ARRAYIDX]], align 4, !tbaa [[INT_TBAA2]]
 // SANITIZE-WITH-ATTR-NEXT:    ret void
 //
@@ -256,7 +256,7 @@ size_t test2_bdos_cast(struct annotated *p) {
 // NO-SANITIZE-WITH-ATTR-SAME: ptr noundef [[P:%.*]], i64 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // NO-SANITIZE-WITH-ATTR-NEXT:  [[ENTRY:.*:]]
 // NO-SANITIZE-WITH-ATTR-NEXT:    [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12
-// NO-SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[INDEX]]
+// NO-SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [4 x i8], ptr [[ARRAY]], i64 [[INDEX]]
 // NO-SANITIZE-WITH-ATTR-NEXT:    store i32 -1, ptr [[ARRAYIDX]], align 4, !tbaa [[INT_TBAA2]]
 // NO-SANITIZE-WITH-ATTR-NEXT:    ret void
 //
@@ -264,7 +264,7 @@ size_t test2_bdos_cast(struct annotated *p) {
 // SANITIZE-WITHOUT-ATTR-SAME: ptr noundef [[P:%.*]], i64 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // SANITIZE-WITHOUT-ATTR-NEXT:  [[ENTRY:.*:]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12
-// SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[INDEX]]
+// SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [4 x i8], ptr [[ARRAY]], i64 [[INDEX]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    store i32 -1, ptr [[ARRAYIDX]], align 4, !tbaa [[INT_TBAA2]]
 // SANITIZE-WITHOUT-ATTR-NEXT:    ret void
 //
@@ -272,7 +272,7 @@ size_t test2_bdos_cast(struct annotated *p) {
 // NO-SANITIZE-WITHOUT-ATTR-SAME: ptr noundef [[P:%.*]], i64 noundef [[INDEX:%.*]]) local_unnamed_addr #[[ATTR0]] {
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:  [[ENTRY:.*:]]
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAY:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 12
-// NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[INDEX]]
+// NO-SANITIZE-WITHOUT-ATTR-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds nuw [4 x i8], ptr [[ARRAY]], i64 [[INDEX]]
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    store i32 -1, ptr [[ARRAYIDX]], align 4, !tbaa [[INT_TBAA2]]
 // NO-SANITIZE-WITHOUT-ATTR-NEXT:    ret void
 //
@@ -352,7 +352,7 @@ size_t test3_bdos_cast(struct annotated *p) {
 // SANITIZE-WITH-ATTR:       [[CONT12]]:
 // SANITIZE-WITH-ATTR-NEXT:    [[RESULT:%.*]] = add i32 [[FLEXIBLE_ARRAY_MEMBER_SIZE]], 244
 // SANITIZE-WITH-ATTR-NEXT:    [[TMP2:%.*]] = and i32 [[RESULT]], 252
-// SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX10:%.*]] = getelementptr inbounds nuw i32, ptr [[ARRAY]], i64 [[IDXPROM]]
+// SANITIZE-WITH-ATTR-NEXT:    [[ARRAYIDX10:%.*]] = getelementptr inbounds nuw [4 x i8], ptr [[ARRAY]], i64 [[IDXPROM]]
 // SANITIZE-WITH-ATTR-NEXT:    store i32 [[TMP2]], ptr [[ARRAYIDX10]], align 4, !tbaa [[INT_TBAA2]]
 // SANITIZE-WITH-ATTR-NEXT:    [[DOTNOT79:%.*]] = icmp eq i32 [[DOTCOUNTED_BY_LOAD]], 3
 // ...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/180745


More information about the cfe-commits mailing list