[clang] [llvm] [mlir] [polly] [IR] Add alias scope domains with disjoint scopes (PR #218768)
Krzysztof Drewniak via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 16 15:48:43 PDT 2026
https://github.com/krzysz00 updated https://github.com/llvm/llvm-project/pull/218768
>From 6ecb3949b9f4a13877019495d589432cdc22d2e2 Mon Sep 17 00:00:00 2001
From: Krzysztof Drewniak <Krzysztof.Drewniak at amd.com>
Date: Thu, 20 Aug 2026 18:43:58 +0000
Subject: [PATCH 1/6] [IR] Add alias scope domains with disjoint scopes
See RFC at
https://discourse.llvm.org/t/rfc-disjoint-scope-alias-scope-noalias-domains/91537
This commit adds support for declaring an alias scope domain disjoint.
Disjoint domains are ones where each scope is implicitly `!noalias`
with each other scope in the domain. This is represented by adding an
`i1` into the scope's domain as the second argument, with `i1 true`
representing disjoint scopes and `i1 false` representing the old
non-disjoint behavior. AutoUpgrade mechanisms have been added to add
in the missing `i1 false` to existing metadata.
This commit updates alias analysis to know about disjoint scopes and
updates the function cloner to also clone the alias domain if it's
disjoint (since, as a herd of LLMs discovered, you don't want the old
IR to be noalias with a clone of itself).
Commits to migrate passes to use disjoint scopes where that's an
option are future PRs.
AI disclosure: Claude did the coding on this one, I looked over it and
wrote this commit message
---
.../CodeGen/LoongArch/lasx/builtin-alias.c | 2 +-
.../arm-v8.2a-neon-intrinsics-generic.c | 144 +++++++++---------
clang/test/CodeGen/arm_neon_intrinsics.c | 108 ++++++-------
.../taskloop_strictmodifier_codegen.cpp | 4 +-
llvm/docs/LangRef.md | 45 +++++-
llvm/include/llvm/Analysis/ScopedNoAliasAA.h | 6 +
llvm/include/llvm/IR/MDBuilder.h | 15 +-
llvm/include/llvm/IR/Metadata.h | 28 ++++
llvm/lib/Analysis/ScopedNoAliasAA.cpp | 63 +++++++-
llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 9 ++
llvm/lib/Bitcode/Reader/MetadataLoader.cpp | 97 ++++++++++++
llvm/lib/Bitcode/Reader/MetadataLoader.h | 5 +
llvm/lib/IR/AutoUpgrade.cpp | 1 +
llvm/lib/IR/MDBuilder.cpp | 20 ++-
llvm/lib/IR/Verifier.cpp | 14 +-
.../InstCombine/InstructionCombining.cpp | 37 ++++-
llvm/lib/Transforms/Utils/CloneFunction.cpp | 16 +-
llvm/test/Analysis/AliasSet/intrinsics.ll | 2 +-
.../Analysis/BasicAA/noalias-scope-decl.ll | 2 +-
.../Analysis/CostModel/X86/free-intrinsics.ll | 2 +-
.../CostModel/free-intrinsics-datalayout.ll | 2 +-
.../CostModel/free-intrinsics-no_info.ll | 2 +-
.../LoopAccessAnalysis/noalias-scope-decl.ll | 4 +-
.../Analysis/MemorySSA/noalias-scope-decl.ll | 2 +-
.../ScopedNoAliasAA/alias-scope-merging.ll | 6 +-
.../Analysis/ScopedNoAliasAA/basic-domains.ll | 4 +-
llvm/test/Analysis/ScopedNoAliasAA/basic.ll | 2 +-
llvm/test/Analysis/ScopedNoAliasAA/basic2.ll | 2 +-
.../ScopedNoAliasAA/disjoint-domains.ll | 71 +++++++++
.../Analysis/ScopedNoAliasAA/fence-modref.ll | 2 +-
llvm/test/Assembler/incomplete-ir-metadata.ll | 4 +-
.../Bitcode/upgrade-alias-scope-domains.ll | 56 +++++++
.../AArch64/GlobalISel/arm64-irtranslator.ll | 2 +-
llvm/test/CodeGen/AArch64/memcpy-scoped-aa.ll | 4 +-
.../CodeGen/AArch64/merge-scoped-aa-store.ll | 4 +-
.../CodeGen/AArch64/vector_merge_dep_check.ll | 2 +-
.../AMDGPU/lds-dma-workgroup-release.ll | 2 +-
.../lower-intrinsics-noalias-metadata.ll | 2 +-
llvm/test/CodeGen/AMDGPU/lower-kernargs.ll | 12 +-
...rnel-arguments-noalias-call-no-ptr-args.ll | 8 +-
.../AMDGPU/lower-lds-struct-aa-memcpy.ll | 2 +-
.../AMDGPU/lower-lds-struct-aa-merge.ll | 14 +-
.../CodeGen/AMDGPU/lower-lds-struct-aa.ll | 4 +-
.../AMDGPU/lower-lds-with-alias-scope.ll | 2 +-
.../CodeGen/AMDGPU/lower-lds-with-noalias.ll | 6 +-
.../AMDGPU/lower-module-lds-via-hybrid.ll | 4 +-
.../CodeGen/AMDGPU/lower-noalias-kernargs.ll | 16 +-
llvm/test/CodeGen/AMDGPU/memcpy-scoped-aa.ll | 4 +-
.../AMDGPU/remove-no-kernel-id-attribute.ll | 4 +-
.../AMDGPU/si-split-load-store-alias-info.ll | 2 +-
.../AMDGPU/target-mem-intrinsic-metadata.ll | 2 +-
llvm/test/CodeGen/AMDGPU/waitcnt-unscoped.ll | 8 +-
llvm/test/CodeGen/AVR/rust-avr-bug-95.ll | 6 +-
.../isel-expand-unaligned-loads-noindexed.ll | 2 +-
.../CodeGen/Hexagon/swp-conv3x3-nested.ll | 2 +-
.../CodeGen/MIR/AArch64/machine-metadata.mir | 62 ++++----
.../CodeGen/MIR/AMDGPU/machine-metadata.mir | 74 ++++-----
.../test/CodeGen/MIR/X86/machine-metadata.mir | 68 +++++----
llvm/test/CodeGen/MIR/X86/memory-operands.mir | 2 +-
.../CodeGen/PowerPC/non-simple-args-intrin.ll | 2 +-
.../alias-barrier.ll | 2 +-
.../alias-copy-memory.ll | 2 +-
.../alias-domain-order.ll | 2 +-
.../alias-load-store-atomic.ll | 8 +-
.../alias-load-store-struct.ll | 2 +-
.../alias-load-store.ll | 6 +-
.../alias-masked-load-store.ll | 6 +-
.../llvm-intrinsics/noalias-scope-decl.ll | 2 +-
.../test/CodeGen/SystemZ/subregliveness-01.ll | 2 +-
.../test/CodeGen/X86/dbg-distringtype-uint.ll | 2 +-
llvm/test/CodeGen/X86/memcpy-scoped-aa.ll | 4 +-
llvm/test/CodeGen/X86/pr48727.ll | 2 +-
.../DebugInfo/COFF/fortran-contained-proc.ll | 2 +-
llvm/test/DebugInfo/Generic/sroa-samesize.ll | 2 +-
.../global-sra-struct-part-overlap-segment.ll | 2 +-
.../AggressiveInstCombine/AArch64/or-load.ll | 2 +-
.../AggressiveInstCombine/X86/or-load.ll | 2 +-
.../AggressiveInstCombine/X86/store-merge.ll | 6 +-
.../AtomicExpand/AMDGPU/expand-atomic-i16.ll | 2 +-
.../dfa-jump-threading-transform.ll | 4 +-
.../DeadStoreElimination/merge-stores.ll | 2 +-
.../DeadStoreElimination/scoped-noalias.ll | 2 +-
.../Transforms/EarlyCSE/noalias-scope-decl.ll | 2 +-
llvm/test/Transforms/GVN/noalias.ll | 4 +-
.../Transforms/GVN/rle-coerced-noalias.ll | 4 +-
.../addrec_no_exec_on_every_iteration.ll | 2 +-
.../InferAddressSpaces/AMDGPU/debug-info.ll | 2 +-
.../AMDGPU/mem-intrinsics.ll | 4 +-
.../Inline/AMDGPU/load-intrinsics.ll | 7 +-
.../Transforms/Inline/noalias-calls-always.ll | 4 +-
llvm/test/Transforms/Inline/noalias-calls.ll | 4 +-
llvm/test/Transforms/Inline/noalias-calls2.ll | 68 ++++-----
llvm/test/Transforms/Inline/noalias-cs.ll | 68 ++++-----
.../Inline/noalias-escape-source.ll | 6 +-
llvm/test/Transforms/Inline/noalias.ll | 4 +-
llvm/test/Transforms/Inline/noalias2.ll | 8 +-
llvm/test/Transforms/Inline/noalias3.ll | 2 +-
llvm/test/Transforms/Inline/pr48209.ll | 2 +-
llvm/test/Transforms/Inline/pr50270.ll | 2 +-
.../AMDGPU/memcpy-from-constant.ll | 2 +-
.../Transforms/InstCombine/bitcast-store.ll | 2 +-
.../InstCombine/fold-phi-load-metadata.ll | 2 +-
.../InstCombine/load-combine-metadata.ll | 2 +-
.../InstCombine/loadstore-metadata.ll | 8 +-
.../Transforms/InstCombine/memcpy-to-load.ll | 4 +-
.../noalias-scope-decl-disjoint-domain.ll | 95 ++++++++++++
.../InstCombine/noalias-scope-decl.ll | 2 +-
.../InstCombine/select-masked_load.ll | 2 +-
.../JumpThreading/free_instructions.ll | 2 +-
.../JumpThreading/noalias-scope-decl.ll | 73 ++++++++-
.../Transforms/JumpThreading/thread-loads.ll | 6 +-
.../LICM/AMDGPU/buffer-rsrc-ptrs.ll | 2 +-
llvm/test/Transforms/LICM/dropped-tbaa.ll | 2 +-
llvm/test/Transforms/LICM/hoist-metadata.ll | 2 +-
llvm/test/Transforms/LICM/licm-ci.ll | 2 +-
llvm/test/Transforms/LICM/pr42969.ll | 2 +-
llvm/test/Transforms/LICM/scalar-promote.ll | 4 +-
.../LoadStoreVectorizer/AMDGPU/aa-metadata.ll | 2 +-
.../AMDGPU/fence-noalias-metadata.ll | 4 +-
llvm/test/Transforms/LoopDeletion/noalias.ll | 2 +-
.../LoopDistribute/bounds-expansion-bug.ll | 2 +-
.../LoopDistribute/cross-partition-access.ll | 2 +-
.../Transforms/LoopDistribute/followup.ll | 2 +-
.../Transforms/LoopDistribute/no-reprocess.ll | 2 +-
.../LoopDistribute/non-lcssa-input.ll | 4 +-
.../Transforms/LoopDistribute/outside-use.ll | 30 ++--
llvm/test/Transforms/LoopRotate/noalias.ll | 4 +-
llvm/test/Transforms/LoopUnroll/noalias.ll | 46 +++---
.../peel-loop-noalias-scope-decl.ll | 84 +++++-----
.../LoopVectorize/AArch64/masked_ldst_sme.ll | 2 +-
.../LoopVectorize/AArch64/predicated-costs.ll | 2 +-
.../LoopVectorize/AArch64/store-costs-sve.ll | 4 +-
.../LoopVectorize/AArch64/sve2-histcnt.ll | 4 +-
.../RISCV/blocks-with-dead-instructions.ll | 2 +-
.../LoopVectorize/RISCV/dead-ops-cost.ll | 4 +-
.../LoopVectorize/RISCV/induction-costs.ll | 2 +-
.../RISCV/tail-folding-cast-intrinsics.ll | 20 +--
.../RISCV/tail-folding-intermediate-store.ll | 8 +-
.../truncate-to-minimal-bitwidth-cost.ll | 2 +-
.../RISCV/type-info-cache-evl-crash.ll | 2 +-
.../vf-will-not-generate-any-vector-insts.ll | 2 +-
.../VPlan/AArch64/sve2-histcnt-vplan.ll | 2 +-
.../LoopVectorize/X86/interleave-cost.ll | 2 +-
.../LoopVectorize/dead_instructions.ll | 2 +-
.../interleaved-accesses-metadata.ll | 2 +-
.../test/Transforms/LoopVectorize/metadata.ll | 10 +-
.../Transforms/LoopVectorize/noalias-md.ll | 2 +-
.../noalias-scope-decl-outer-loop.ll | 2 +-
.../LoopVectorize/noalias-scope-decl.ll | 4 +-
.../LoopVectorize/predicate-switch.ll | 4 +-
...te-region-branch-weights-merged-mem-ops.ll | 4 +-
...ime-check-threshold-with-force-metadata.ll | 2 +-
.../scalable-noalias-scope-decl.ll | 4 +-
.../LoopVectorize/select-cmp-multiuse.ll | 6 +-
.../unroll-novec-memcheck-metadata.ll | 2 +-
.../LoopVersioning/add-phi-update-users.ll | 8 +-
.../Transforms/LoopVersioning/crash-36998.ll | 2 +-
.../LoopVersioning/noalias-version-twice.ll | 4 +-
.../test/Transforms/LoopVersioning/noalias.ll | 2 +-
...wrapping-pointer-non-integral-addrspace.ll | 2 +-
.../Transforms/LowerInvoke/lowerinvoke.ll | 2 +-
.../aa-recursion-assertion-failure.ll | 2 +-
llvm/test/Transforms/MemCpyOpt/callslot_aa.ll | 2 +-
.../Transforms/MemCpyOpt/callslot_badaa.ll | 4 +-
.../Transforms/MemCpyOpt/callslot_noalias.ll | 2 +-
.../MemCpyOpt/load-store-to-memcpy.ll | 16 +-
llvm/test/Transforms/MemCpyOpt/memcpy.ll | 2 +-
llvm/test/Transforms/MemCpyOpt/stack-move.ll | 2 +-
.../MergeFunc/mergefunc-preserve-nonnull.ll | 4 +-
.../preserve-store-metadata.ll | 4 +-
llvm/test/Transforms/NewGVN/noalias.ll | 4 +-
.../Transforms/OpenMP/spmdization_guarding.ll | 6 +-
.../AArch64/indvars-vectorization.ll | 2 +-
.../X86/loop-vectorizer-noalias.ll | 2 +-
.../drop-invalid-metadata.ll | 2 +-
.../X86/gathered-shuffle-resized.ll | 4 +-
.../Transforms/SROA/mem-par-metadata-sroa.ll | 2 +-
.../Util/combine-alias-scope-metadata.ll | 2 +-
llvm/test/Transforms/VectorCombine/alias.ll | 25 ++-
llvm/test/Verifier/alias-scope-metadata.ll | 35 +++--
llvm/test/Verifier/noalias_scope_decl.ll | 2 +-
.../Inputs/dot_value_in_metadata_string.ll | 2 +-
.../dot_value_in_metadata_string.ll.expected | 4 +-
llvm/test/tools/llubi/noalias_scope.ll | 2 +-
llvm/unittests/MIR/MachineMetadata.cpp | 6 +-
mlir/lib/Target/LLVMIR/ModuleImport.cpp | 8 +-
mlir/lib/Target/LLVMIR/ModuleTranslation.cpp | 4 +-
.../Target/LLVMIR/Import/import-failure.ll | 2 +-
.../LLVMIR/Import/metadata-alias-scopes.ll | 10 +-
.../Target/LLVMIR/attribute-alias-scopes.mlir | 8 +-
polly/lib/CodeGen/IRBuilder.cpp | 4 +-
polly/test/CodeGen/MemAccess/create_arrays.ll | 2 +-
polly/test/CodeGen/annotated_alias_scopes.ll | 2 +-
.../CodeGen/invariant_load_alias_metadata.ll | 2 +-
polly/test/CodeGen/scev-backedgetaken.ll | 2 +-
195 files changed, 1342 insertions(+), 718 deletions(-)
create mode 100644 llvm/test/Analysis/ScopedNoAliasAA/disjoint-domains.ll
create mode 100644 llvm/test/Bitcode/upgrade-alias-scope-domains.ll
create mode 100644 llvm/test/Transforms/InstCombine/noalias-scope-decl-disjoint-domain.ll
diff --git a/clang/test/CodeGen/LoongArch/lasx/builtin-alias.c b/clang/test/CodeGen/LoongArch/lasx/builtin-alias.c
index 16ff84cff58940..a7d218ac8ba15d 100644
--- a/clang/test/CodeGen/LoongArch/lasx/builtin-alias.c
+++ b/clang/test/CodeGen/LoongArch/lasx/builtin-alias.c
@@ -7297,5 +7297,5 @@ v4i64 insert_128_hi(v4i64 _1, v2i64 _2) { return __lasx_insert_128_hi(_1, _2); }
// CHECK: [[CHAR_TBAA6]] = !{[[META4]], [[META4]], i64 0}
// CHECK: [[META7]] = !{[[META8:![0-9]+]]}
// CHECK: [[META8]] = distinct !{[[META8]], [[META9:![0-9]+]], !"__lasx_xvldx: %agg.result"}
-// CHECK: [[META9]] = distinct !{[[META9]], !"__lasx_xvldx"}
+// CHECK: [[META9]] = distinct !{[[META9]], i1 false, !"__lasx_xvldx"}
//.
diff --git a/clang/test/CodeGen/arm-v8.2a-neon-intrinsics-generic.c b/clang/test/CodeGen/arm-v8.2a-neon-intrinsics-generic.c
index 7f12598f71ff82..d8430db209b05b 100644
--- a/clang/test/CodeGen/arm-v8.2a-neon-intrinsics-generic.c
+++ b/clang/test/CodeGen/arm-v8.2a-neon-intrinsics-generic.c
@@ -97,7 +97,7 @@ float16x8_t test_vbslq_f16(uint16x8_t a, float16x8_t b, float16x8_t c) {
// CHECK-NOFP16-NEXT: [[TMP1:%.*]] = bitcast <2 x i32> [[B_COERCE]] to <4 x half>
// CHECK-NOFP16-NEXT: [[TMP2:%.*]] = bitcast <4 x half> [[TMP0]] to <2 x i32>
// CHECK-NOFP16-NEXT: [[TMP3:%.*]] = bitcast <4 x half> [[TMP1]] to <2 x i32>
-// CHECK-NOFP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META3:![0-9]+]])
+// CHECK-NOFP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META2:![0-9]+]])
// CHECK-NOFP16-NEXT: [[TMP4:%.*]] = bitcast <2 x i32> [[TMP2]] to <4 x half>
// CHECK-NOFP16-NEXT: [[TMP5:%.*]] = bitcast <2 x i32> [[TMP3]] to <4 x half>
// CHECK-NOFP16-NEXT: [[TMP6:%.*]] = bitcast <4 x half> [[TMP4]] to <4 x i16>
@@ -107,16 +107,16 @@ float16x8_t test_vbslq_f16(uint16x8_t a, float16x8_t b, float16x8_t c) {
// CHECK-NOFP16-NEXT: [[TMP10:%.*]] = bitcast <8 x i8> [[TMP8]] to <4 x i16>
// CHECK-NOFP16-NEXT: [[TMP11:%.*]] = bitcast <8 x i8> [[TMP9]] to <4 x i16>
// CHECK-NOFP16-NEXT: [[VZIP_I:%.*]] = shufflevector <4 x i16> [[TMP10]], <4 x i16> [[TMP11]], <4 x i32> <i32 0, i32 4, i32 1, i32 5>
-// CHECK-NOFP16-NEXT: store <4 x i16> [[VZIP_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META3]]
+// CHECK-NOFP16-NEXT: store <4 x i16> [[VZIP_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META2]]
// CHECK-NOFP16-NEXT: [[TMP12:%.*]] = getelementptr inbounds <4 x i16>, ptr [[AGG_RESULT]], i32 1
// CHECK-NOFP16-NEXT: [[VZIP3_I:%.*]] = shufflevector <4 x i16> [[TMP10]], <4 x i16> [[TMP11]], <4 x i32> <i32 2, i32 6, i32 3, i32 7>
-// CHECK-NOFP16-NEXT: store <4 x i16> [[VZIP3_I]], ptr [[TMP12]], align 4, !alias.scope [[META3]]
+// CHECK-NOFP16-NEXT: store <4 x i16> [[VZIP3_I]], ptr [[TMP12]], align 4, !alias.scope [[META2]]
// CHECK-NOFP16-NEXT: ret void
//
// CHECK-FP16-LABEL: define dso_local void @test_vzip_f16(
// CHECK-FP16-SAME: ptr dead_on_unwind noalias writable sret([[STRUCT_FLOAT16X4X2_T:%.*]]) align 8 [[AGG_RESULT:%.*]], <4 x half> noundef [[A:%.*]], <4 x half> noundef [[B:%.*]]) #[[ATTR0]] {
// CHECK-FP16-NEXT: entry:
-// CHECK-FP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META3:![0-9]+]])
+// CHECK-FP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META2:![0-9]+]])
// CHECK-FP16-NEXT: [[TMP0:%.*]] = bitcast <4 x half> [[A]] to <4 x i16>
// CHECK-FP16-NEXT: [[TMP1:%.*]] = bitcast <4 x half> [[B]] to <4 x i16>
// CHECK-FP16-NEXT: [[TMP2:%.*]] = bitcast <4 x i16> [[TMP0]] to <8 x i8>
@@ -124,10 +124,10 @@ float16x8_t test_vbslq_f16(uint16x8_t a, float16x8_t b, float16x8_t c) {
// CHECK-FP16-NEXT: [[TMP4:%.*]] = bitcast <8 x i8> [[TMP2]] to <4 x half>
// CHECK-FP16-NEXT: [[TMP5:%.*]] = bitcast <8 x i8> [[TMP3]] to <4 x half>
// CHECK-FP16-NEXT: [[VZIP_I:%.*]] = shufflevector <4 x half> [[TMP4]], <4 x half> [[TMP5]], <4 x i32> <i32 0, i32 4, i32 1, i32 5>
-// CHECK-FP16-NEXT: store <4 x half> [[VZIP_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META3]]
+// CHECK-FP16-NEXT: store <4 x half> [[VZIP_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META2]]
// CHECK-FP16-NEXT: [[TMP6:%.*]] = getelementptr inbounds <4 x half>, ptr [[AGG_RESULT]], i32 1
// CHECK-FP16-NEXT: [[VZIP1_I:%.*]] = shufflevector <4 x half> [[TMP4]], <4 x half> [[TMP5]], <4 x i32> <i32 2, i32 6, i32 3, i32 7>
-// CHECK-FP16-NEXT: store <4 x half> [[VZIP1_I]], ptr [[TMP6]], align 4, !alias.scope [[META3]]
+// CHECK-FP16-NEXT: store <4 x half> [[VZIP1_I]], ptr [[TMP6]], align 4, !alias.scope [[META2]]
// CHECK-FP16-NEXT: ret void
//
float16x4x2_t test_vzip_f16(float16x4_t a, float16x4_t b) {
@@ -141,7 +141,7 @@ float16x4x2_t test_vzip_f16(float16x4_t a, float16x4_t b) {
// CHECK-NOFP16-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[B_COERCE]] to <8 x half>
// CHECK-NOFP16-NEXT: [[TMP2:%.*]] = bitcast <8 x half> [[TMP0]] to <4 x i32>
// CHECK-NOFP16-NEXT: [[TMP3:%.*]] = bitcast <8 x half> [[TMP1]] to <4 x i32>
-// CHECK-NOFP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META6:![0-9]+]])
+// CHECK-NOFP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META5:![0-9]+]])
// CHECK-NOFP16-NEXT: [[TMP4:%.*]] = bitcast <4 x i32> [[TMP2]] to <8 x half>
// CHECK-NOFP16-NEXT: [[TMP5:%.*]] = bitcast <4 x i32> [[TMP3]] to <8 x half>
// CHECK-NOFP16-NEXT: [[TMP6:%.*]] = bitcast <8 x half> [[TMP4]] to <8 x i16>
@@ -151,16 +151,16 @@ float16x4x2_t test_vzip_f16(float16x4_t a, float16x4_t b) {
// CHECK-NOFP16-NEXT: [[TMP10:%.*]] = bitcast <16 x i8> [[TMP8]] to <8 x i16>
// CHECK-NOFP16-NEXT: [[TMP11:%.*]] = bitcast <16 x i8> [[TMP9]] to <8 x i16>
// CHECK-NOFP16-NEXT: [[VZIP_I:%.*]] = shufflevector <8 x i16> [[TMP10]], <8 x i16> [[TMP11]], <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
-// CHECK-NOFP16-NEXT: store <8 x i16> [[VZIP_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META6]]
+// CHECK-NOFP16-NEXT: store <8 x i16> [[VZIP_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META5]]
// CHECK-NOFP16-NEXT: [[TMP12:%.*]] = getelementptr inbounds <8 x i16>, ptr [[AGG_RESULT]], i32 1
// CHECK-NOFP16-NEXT: [[VZIP3_I:%.*]] = shufflevector <8 x i16> [[TMP10]], <8 x i16> [[TMP11]], <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
-// CHECK-NOFP16-NEXT: store <8 x i16> [[VZIP3_I]], ptr [[TMP12]], align 4, !alias.scope [[META6]]
+// CHECK-NOFP16-NEXT: store <8 x i16> [[VZIP3_I]], ptr [[TMP12]], align 4, !alias.scope [[META5]]
// CHECK-NOFP16-NEXT: ret void
//
// CHECK-FP16-LABEL: define dso_local void @test_vzipq_f16(
// CHECK-FP16-SAME: ptr dead_on_unwind noalias writable sret([[STRUCT_FLOAT16X8X2_T:%.*]]) align 16 [[AGG_RESULT:%.*]], <8 x half> noundef [[A:%.*]], <8 x half> noundef [[B:%.*]]) #[[ATTR0]] {
// CHECK-FP16-NEXT: entry:
-// CHECK-FP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META6:![0-9]+]])
+// CHECK-FP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META5:![0-9]+]])
// CHECK-FP16-NEXT: [[TMP0:%.*]] = bitcast <8 x half> [[A]] to <8 x i16>
// CHECK-FP16-NEXT: [[TMP1:%.*]] = bitcast <8 x half> [[B]] to <8 x i16>
// CHECK-FP16-NEXT: [[TMP2:%.*]] = bitcast <8 x i16> [[TMP0]] to <16 x i8>
@@ -168,10 +168,10 @@ float16x4x2_t test_vzip_f16(float16x4_t a, float16x4_t b) {
// CHECK-FP16-NEXT: [[TMP4:%.*]] = bitcast <16 x i8> [[TMP2]] to <8 x half>
// CHECK-FP16-NEXT: [[TMP5:%.*]] = bitcast <16 x i8> [[TMP3]] to <8 x half>
// CHECK-FP16-NEXT: [[VZIP_I:%.*]] = shufflevector <8 x half> [[TMP4]], <8 x half> [[TMP5]], <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>
-// CHECK-FP16-NEXT: store <8 x half> [[VZIP_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META6]]
+// CHECK-FP16-NEXT: store <8 x half> [[VZIP_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META5]]
// CHECK-FP16-NEXT: [[TMP6:%.*]] = getelementptr inbounds <8 x half>, ptr [[AGG_RESULT]], i32 1
// CHECK-FP16-NEXT: [[VZIP1_I:%.*]] = shufflevector <8 x half> [[TMP4]], <8 x half> [[TMP5]], <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
-// CHECK-FP16-NEXT: store <8 x half> [[VZIP1_I]], ptr [[TMP6]], align 4, !alias.scope [[META6]]
+// CHECK-FP16-NEXT: store <8 x half> [[VZIP1_I]], ptr [[TMP6]], align 4, !alias.scope [[META5]]
// CHECK-FP16-NEXT: ret void
//
float16x8x2_t test_vzipq_f16(float16x8_t a, float16x8_t b) {
@@ -185,7 +185,7 @@ float16x8x2_t test_vzipq_f16(float16x8_t a, float16x8_t b) {
// CHECK-NOFP16-NEXT: [[TMP1:%.*]] = bitcast <2 x i32> [[B_COERCE]] to <4 x half>
// CHECK-NOFP16-NEXT: [[TMP2:%.*]] = bitcast <4 x half> [[TMP0]] to <2 x i32>
// CHECK-NOFP16-NEXT: [[TMP3:%.*]] = bitcast <4 x half> [[TMP1]] to <2 x i32>
-// CHECK-NOFP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META9:![0-9]+]])
+// CHECK-NOFP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META8:![0-9]+]])
// CHECK-NOFP16-NEXT: [[TMP4:%.*]] = bitcast <2 x i32> [[TMP2]] to <4 x half>
// CHECK-NOFP16-NEXT: [[TMP5:%.*]] = bitcast <2 x i32> [[TMP3]] to <4 x half>
// CHECK-NOFP16-NEXT: [[TMP6:%.*]] = bitcast <4 x half> [[TMP4]] to <4 x i16>
@@ -195,16 +195,16 @@ float16x8x2_t test_vzipq_f16(float16x8_t a, float16x8_t b) {
// CHECK-NOFP16-NEXT: [[TMP10:%.*]] = bitcast <8 x i8> [[TMP8]] to <4 x i16>
// CHECK-NOFP16-NEXT: [[TMP11:%.*]] = bitcast <8 x i8> [[TMP9]] to <4 x i16>
// CHECK-NOFP16-NEXT: [[VUZP_I:%.*]] = shufflevector <4 x i16> [[TMP10]], <4 x i16> [[TMP11]], <4 x i32> <i32 0, i32 2, i32 4, i32 6>
-// CHECK-NOFP16-NEXT: store <4 x i16> [[VUZP_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META9]]
+// CHECK-NOFP16-NEXT: store <4 x i16> [[VUZP_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META8]]
// CHECK-NOFP16-NEXT: [[TMP12:%.*]] = getelementptr inbounds <4 x i16>, ptr [[AGG_RESULT]], i32 1
// CHECK-NOFP16-NEXT: [[VUZP3_I:%.*]] = shufflevector <4 x i16> [[TMP10]], <4 x i16> [[TMP11]], <4 x i32> <i32 1, i32 3, i32 5, i32 7>
-// CHECK-NOFP16-NEXT: store <4 x i16> [[VUZP3_I]], ptr [[TMP12]], align 4, !alias.scope [[META9]]
+// CHECK-NOFP16-NEXT: store <4 x i16> [[VUZP3_I]], ptr [[TMP12]], align 4, !alias.scope [[META8]]
// CHECK-NOFP16-NEXT: ret void
//
// CHECK-FP16-LABEL: define dso_local void @test_vuzp_f16(
// CHECK-FP16-SAME: ptr dead_on_unwind noalias writable sret([[STRUCT_FLOAT16X4X2_T:%.*]]) align 8 [[AGG_RESULT:%.*]], <4 x half> noundef [[A:%.*]], <4 x half> noundef [[B:%.*]]) #[[ATTR0]] {
// CHECK-FP16-NEXT: entry:
-// CHECK-FP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META9:![0-9]+]])
+// CHECK-FP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META8:![0-9]+]])
// CHECK-FP16-NEXT: [[TMP0:%.*]] = bitcast <4 x half> [[A]] to <4 x i16>
// CHECK-FP16-NEXT: [[TMP1:%.*]] = bitcast <4 x half> [[B]] to <4 x i16>
// CHECK-FP16-NEXT: [[TMP2:%.*]] = bitcast <4 x i16> [[TMP0]] to <8 x i8>
@@ -212,10 +212,10 @@ float16x8x2_t test_vzipq_f16(float16x8_t a, float16x8_t b) {
// CHECK-FP16-NEXT: [[TMP4:%.*]] = bitcast <8 x i8> [[TMP2]] to <4 x half>
// CHECK-FP16-NEXT: [[TMP5:%.*]] = bitcast <8 x i8> [[TMP3]] to <4 x half>
// CHECK-FP16-NEXT: [[VUZP_I:%.*]] = shufflevector <4 x half> [[TMP4]], <4 x half> [[TMP5]], <4 x i32> <i32 0, i32 2, i32 4, i32 6>
-// CHECK-FP16-NEXT: store <4 x half> [[VUZP_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META9]]
+// CHECK-FP16-NEXT: store <4 x half> [[VUZP_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META8]]
// CHECK-FP16-NEXT: [[TMP6:%.*]] = getelementptr inbounds <4 x half>, ptr [[AGG_RESULT]], i32 1
// CHECK-FP16-NEXT: [[VUZP1_I:%.*]] = shufflevector <4 x half> [[TMP4]], <4 x half> [[TMP5]], <4 x i32> <i32 1, i32 3, i32 5, i32 7>
-// CHECK-FP16-NEXT: store <4 x half> [[VUZP1_I]], ptr [[TMP6]], align 4, !alias.scope [[META9]]
+// CHECK-FP16-NEXT: store <4 x half> [[VUZP1_I]], ptr [[TMP6]], align 4, !alias.scope [[META8]]
// CHECK-FP16-NEXT: ret void
//
float16x4x2_t test_vuzp_f16(float16x4_t a, float16x4_t b) {
@@ -229,7 +229,7 @@ float16x4x2_t test_vuzp_f16(float16x4_t a, float16x4_t b) {
// CHECK-NOFP16-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[B_COERCE]] to <8 x half>
// CHECK-NOFP16-NEXT: [[TMP2:%.*]] = bitcast <8 x half> [[TMP0]] to <4 x i32>
// CHECK-NOFP16-NEXT: [[TMP3:%.*]] = bitcast <8 x half> [[TMP1]] to <4 x i32>
-// CHECK-NOFP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META12:![0-9]+]])
+// CHECK-NOFP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META11:![0-9]+]])
// CHECK-NOFP16-NEXT: [[TMP4:%.*]] = bitcast <4 x i32> [[TMP2]] to <8 x half>
// CHECK-NOFP16-NEXT: [[TMP5:%.*]] = bitcast <4 x i32> [[TMP3]] to <8 x half>
// CHECK-NOFP16-NEXT: [[TMP6:%.*]] = bitcast <8 x half> [[TMP4]] to <8 x i16>
@@ -239,16 +239,16 @@ float16x4x2_t test_vuzp_f16(float16x4_t a, float16x4_t b) {
// CHECK-NOFP16-NEXT: [[TMP10:%.*]] = bitcast <16 x i8> [[TMP8]] to <8 x i16>
// CHECK-NOFP16-NEXT: [[TMP11:%.*]] = bitcast <16 x i8> [[TMP9]] to <8 x i16>
// CHECK-NOFP16-NEXT: [[VUZP_I:%.*]] = shufflevector <8 x i16> [[TMP10]], <8 x i16> [[TMP11]], <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
-// CHECK-NOFP16-NEXT: store <8 x i16> [[VUZP_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META12]]
+// CHECK-NOFP16-NEXT: store <8 x i16> [[VUZP_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META11]]
// CHECK-NOFP16-NEXT: [[TMP12:%.*]] = getelementptr inbounds <8 x i16>, ptr [[AGG_RESULT]], i32 1
// CHECK-NOFP16-NEXT: [[VUZP3_I:%.*]] = shufflevector <8 x i16> [[TMP10]], <8 x i16> [[TMP11]], <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
-// CHECK-NOFP16-NEXT: store <8 x i16> [[VUZP3_I]], ptr [[TMP12]], align 4, !alias.scope [[META12]]
+// CHECK-NOFP16-NEXT: store <8 x i16> [[VUZP3_I]], ptr [[TMP12]], align 4, !alias.scope [[META11]]
// CHECK-NOFP16-NEXT: ret void
//
// CHECK-FP16-LABEL: define dso_local void @test_vuzpq_f16(
// CHECK-FP16-SAME: ptr dead_on_unwind noalias writable sret([[STRUCT_FLOAT16X8X2_T:%.*]]) align 16 [[AGG_RESULT:%.*]], <8 x half> noundef [[A:%.*]], <8 x half> noundef [[B:%.*]]) #[[ATTR0]] {
// CHECK-FP16-NEXT: entry:
-// CHECK-FP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META12:![0-9]+]])
+// CHECK-FP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META11:![0-9]+]])
// CHECK-FP16-NEXT: [[TMP0:%.*]] = bitcast <8 x half> [[A]] to <8 x i16>
// CHECK-FP16-NEXT: [[TMP1:%.*]] = bitcast <8 x half> [[B]] to <8 x i16>
// CHECK-FP16-NEXT: [[TMP2:%.*]] = bitcast <8 x i16> [[TMP0]] to <16 x i8>
@@ -256,10 +256,10 @@ float16x4x2_t test_vuzp_f16(float16x4_t a, float16x4_t b) {
// CHECK-FP16-NEXT: [[TMP4:%.*]] = bitcast <16 x i8> [[TMP2]] to <8 x half>
// CHECK-FP16-NEXT: [[TMP5:%.*]] = bitcast <16 x i8> [[TMP3]] to <8 x half>
// CHECK-FP16-NEXT: [[VUZP_I:%.*]] = shufflevector <8 x half> [[TMP4]], <8 x half> [[TMP5]], <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
-// CHECK-FP16-NEXT: store <8 x half> [[VUZP_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META12]]
+// CHECK-FP16-NEXT: store <8 x half> [[VUZP_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META11]]
// CHECK-FP16-NEXT: [[TMP6:%.*]] = getelementptr inbounds <8 x half>, ptr [[AGG_RESULT]], i32 1
// CHECK-FP16-NEXT: [[VUZP1_I:%.*]] = shufflevector <8 x half> [[TMP4]], <8 x half> [[TMP5]], <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
-// CHECK-FP16-NEXT: store <8 x half> [[VUZP1_I]], ptr [[TMP6]], align 4, !alias.scope [[META12]]
+// CHECK-FP16-NEXT: store <8 x half> [[VUZP1_I]], ptr [[TMP6]], align 4, !alias.scope [[META11]]
// CHECK-FP16-NEXT: ret void
//
float16x8x2_t test_vuzpq_f16(float16x8_t a, float16x8_t b) {
@@ -273,7 +273,7 @@ float16x8x2_t test_vuzpq_f16(float16x8_t a, float16x8_t b) {
// CHECK-NOFP16-NEXT: [[TMP1:%.*]] = bitcast <2 x i32> [[B_COERCE]] to <4 x half>
// CHECK-NOFP16-NEXT: [[TMP2:%.*]] = bitcast <4 x half> [[TMP0]] to <2 x i32>
// CHECK-NOFP16-NEXT: [[TMP3:%.*]] = bitcast <4 x half> [[TMP1]] to <2 x i32>
-// CHECK-NOFP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META15:![0-9]+]])
+// CHECK-NOFP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META14:![0-9]+]])
// CHECK-NOFP16-NEXT: [[TMP4:%.*]] = bitcast <2 x i32> [[TMP2]] to <4 x half>
// CHECK-NOFP16-NEXT: [[TMP5:%.*]] = bitcast <2 x i32> [[TMP3]] to <4 x half>
// CHECK-NOFP16-NEXT: [[TMP6:%.*]] = bitcast <4 x half> [[TMP4]] to <4 x i16>
@@ -283,16 +283,16 @@ float16x8x2_t test_vuzpq_f16(float16x8_t a, float16x8_t b) {
// CHECK-NOFP16-NEXT: [[TMP10:%.*]] = bitcast <8 x i8> [[TMP8]] to <4 x i16>
// CHECK-NOFP16-NEXT: [[TMP11:%.*]] = bitcast <8 x i8> [[TMP9]] to <4 x i16>
// CHECK-NOFP16-NEXT: [[VTRN_I:%.*]] = shufflevector <4 x i16> [[TMP10]], <4 x i16> [[TMP11]], <4 x i32> <i32 0, i32 4, i32 2, i32 6>
-// CHECK-NOFP16-NEXT: store <4 x i16> [[VTRN_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META15]]
+// CHECK-NOFP16-NEXT: store <4 x i16> [[VTRN_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META14]]
// CHECK-NOFP16-NEXT: [[TMP12:%.*]] = getelementptr inbounds <4 x i16>, ptr [[AGG_RESULT]], i32 1
// CHECK-NOFP16-NEXT: [[VTRN3_I:%.*]] = shufflevector <4 x i16> [[TMP10]], <4 x i16> [[TMP11]], <4 x i32> <i32 1, i32 5, i32 3, i32 7>
-// CHECK-NOFP16-NEXT: store <4 x i16> [[VTRN3_I]], ptr [[TMP12]], align 4, !alias.scope [[META15]]
+// CHECK-NOFP16-NEXT: store <4 x i16> [[VTRN3_I]], ptr [[TMP12]], align 4, !alias.scope [[META14]]
// CHECK-NOFP16-NEXT: ret void
//
// CHECK-FP16-LABEL: define dso_local void @test_vtrn_f16(
// CHECK-FP16-SAME: ptr dead_on_unwind noalias writable sret([[STRUCT_FLOAT16X4X2_T:%.*]]) align 8 [[AGG_RESULT:%.*]], <4 x half> noundef [[A:%.*]], <4 x half> noundef [[B:%.*]]) #[[ATTR0]] {
// CHECK-FP16-NEXT: entry:
-// CHECK-FP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META15:![0-9]+]])
+// CHECK-FP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META14:![0-9]+]])
// CHECK-FP16-NEXT: [[TMP0:%.*]] = bitcast <4 x half> [[A]] to <4 x i16>
// CHECK-FP16-NEXT: [[TMP1:%.*]] = bitcast <4 x half> [[B]] to <4 x i16>
// CHECK-FP16-NEXT: [[TMP2:%.*]] = bitcast <4 x i16> [[TMP0]] to <8 x i8>
@@ -300,10 +300,10 @@ float16x8x2_t test_vuzpq_f16(float16x8_t a, float16x8_t b) {
// CHECK-FP16-NEXT: [[TMP4:%.*]] = bitcast <8 x i8> [[TMP2]] to <4 x half>
// CHECK-FP16-NEXT: [[TMP5:%.*]] = bitcast <8 x i8> [[TMP3]] to <4 x half>
// CHECK-FP16-NEXT: [[VTRN_I:%.*]] = shufflevector <4 x half> [[TMP4]], <4 x half> [[TMP5]], <4 x i32> <i32 0, i32 4, i32 2, i32 6>
-// CHECK-FP16-NEXT: store <4 x half> [[VTRN_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META15]]
+// CHECK-FP16-NEXT: store <4 x half> [[VTRN_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META14]]
// CHECK-FP16-NEXT: [[TMP6:%.*]] = getelementptr inbounds <4 x half>, ptr [[AGG_RESULT]], i32 1
// CHECK-FP16-NEXT: [[VTRN1_I:%.*]] = shufflevector <4 x half> [[TMP4]], <4 x half> [[TMP5]], <4 x i32> <i32 1, i32 5, i32 3, i32 7>
-// CHECK-FP16-NEXT: store <4 x half> [[VTRN1_I]], ptr [[TMP6]], align 4, !alias.scope [[META15]]
+// CHECK-FP16-NEXT: store <4 x half> [[VTRN1_I]], ptr [[TMP6]], align 4, !alias.scope [[META14]]
// CHECK-FP16-NEXT: ret void
//
float16x4x2_t test_vtrn_f16(float16x4_t a, float16x4_t b) {
@@ -317,7 +317,7 @@ float16x4x2_t test_vtrn_f16(float16x4_t a, float16x4_t b) {
// CHECK-NOFP16-NEXT: [[TMP1:%.*]] = bitcast <4 x i32> [[B_COERCE]] to <8 x half>
// CHECK-NOFP16-NEXT: [[TMP2:%.*]] = bitcast <8 x half> [[TMP0]] to <4 x i32>
// CHECK-NOFP16-NEXT: [[TMP3:%.*]] = bitcast <8 x half> [[TMP1]] to <4 x i32>
-// CHECK-NOFP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META18:![0-9]+]])
+// CHECK-NOFP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META17:![0-9]+]])
// CHECK-NOFP16-NEXT: [[TMP4:%.*]] = bitcast <4 x i32> [[TMP2]] to <8 x half>
// CHECK-NOFP16-NEXT: [[TMP5:%.*]] = bitcast <4 x i32> [[TMP3]] to <8 x half>
// CHECK-NOFP16-NEXT: [[TMP6:%.*]] = bitcast <8 x half> [[TMP4]] to <8 x i16>
@@ -327,16 +327,16 @@ float16x4x2_t test_vtrn_f16(float16x4_t a, float16x4_t b) {
// CHECK-NOFP16-NEXT: [[TMP10:%.*]] = bitcast <16 x i8> [[TMP8]] to <8 x i16>
// CHECK-NOFP16-NEXT: [[TMP11:%.*]] = bitcast <16 x i8> [[TMP9]] to <8 x i16>
// CHECK-NOFP16-NEXT: [[VTRN_I:%.*]] = shufflevector <8 x i16> [[TMP10]], <8 x i16> [[TMP11]], <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
-// CHECK-NOFP16-NEXT: store <8 x i16> [[VTRN_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META18]]
+// CHECK-NOFP16-NEXT: store <8 x i16> [[VTRN_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META17]]
// CHECK-NOFP16-NEXT: [[TMP12:%.*]] = getelementptr inbounds <8 x i16>, ptr [[AGG_RESULT]], i32 1
// CHECK-NOFP16-NEXT: [[VTRN3_I:%.*]] = shufflevector <8 x i16> [[TMP10]], <8 x i16> [[TMP11]], <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
-// CHECK-NOFP16-NEXT: store <8 x i16> [[VTRN3_I]], ptr [[TMP12]], align 4, !alias.scope [[META18]]
+// CHECK-NOFP16-NEXT: store <8 x i16> [[VTRN3_I]], ptr [[TMP12]], align 4, !alias.scope [[META17]]
// CHECK-NOFP16-NEXT: ret void
//
// CHECK-FP16-LABEL: define dso_local void @test_vtrnq_f16(
// CHECK-FP16-SAME: ptr dead_on_unwind noalias writable sret([[STRUCT_FLOAT16X8X2_T:%.*]]) align 16 [[AGG_RESULT:%.*]], <8 x half> noundef [[A:%.*]], <8 x half> noundef [[B:%.*]]) #[[ATTR0]] {
// CHECK-FP16-NEXT: entry:
-// CHECK-FP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META18:![0-9]+]])
+// CHECK-FP16-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META17:![0-9]+]])
// CHECK-FP16-NEXT: [[TMP0:%.*]] = bitcast <8 x half> [[A]] to <8 x i16>
// CHECK-FP16-NEXT: [[TMP1:%.*]] = bitcast <8 x half> [[B]] to <8 x i16>
// CHECK-FP16-NEXT: [[TMP2:%.*]] = bitcast <8 x i16> [[TMP0]] to <16 x i8>
@@ -344,10 +344,10 @@ float16x4x2_t test_vtrn_f16(float16x4_t a, float16x4_t b) {
// CHECK-FP16-NEXT: [[TMP4:%.*]] = bitcast <16 x i8> [[TMP2]] to <8 x half>
// CHECK-FP16-NEXT: [[TMP5:%.*]] = bitcast <16 x i8> [[TMP3]] to <8 x half>
// CHECK-FP16-NEXT: [[VTRN_I:%.*]] = shufflevector <8 x half> [[TMP4]], <8 x half> [[TMP5]], <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
-// CHECK-FP16-NEXT: store <8 x half> [[VTRN_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META18]]
+// CHECK-FP16-NEXT: store <8 x half> [[VTRN_I]], ptr [[AGG_RESULT]], align 4, !alias.scope [[META17]]
// CHECK-FP16-NEXT: [[TMP6:%.*]] = getelementptr inbounds <8 x half>, ptr [[AGG_RESULT]], i32 1
// CHECK-FP16-NEXT: [[VTRN1_I:%.*]] = shufflevector <8 x half> [[TMP4]], <8 x half> [[TMP5]], <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>
-// CHECK-FP16-NEXT: store <8 x half> [[VTRN1_I]], ptr [[TMP6]], align 4, !alias.scope [[META18]]
+// CHECK-FP16-NEXT: store <8 x half> [[VTRN1_I]], ptr [[TMP6]], align 4, !alias.scope [[META17]]
// CHECK-FP16-NEXT: ret void
//
float16x8x2_t test_vtrnq_f16(float16x8_t a, float16x8_t b) {
@@ -620,41 +620,41 @@ float16x8_t test_vrev64q_f16(float16x8_t a) {
return vrev64q_f16(a);
}
//.
-// CHECK-NOFP16: [[META3]] = !{[[META4:![0-9]+]]}
-// CHECK-NOFP16: [[META4]] = distinct !{[[META4]], [[META5:![0-9]+]], !"vzip_f16: %agg.result"}
-// CHECK-NOFP16: [[META5]] = distinct !{[[META5]], !"vzip_f16"}
-// CHECK-NOFP16: [[META6]] = !{[[META7:![0-9]+]]}
-// CHECK-NOFP16: [[META7]] = distinct !{[[META7]], [[META8:![0-9]+]], !"vzipq_f16: %agg.result"}
-// CHECK-NOFP16: [[META8]] = distinct !{[[META8]], !"vzipq_f16"}
-// CHECK-NOFP16: [[META9]] = !{[[META10:![0-9]+]]}
-// CHECK-NOFP16: [[META10]] = distinct !{[[META10]], [[META11:![0-9]+]], !"vuzp_f16: %agg.result"}
-// CHECK-NOFP16: [[META11]] = distinct !{[[META11]], !"vuzp_f16"}
-// CHECK-NOFP16: [[META12]] = !{[[META13:![0-9]+]]}
-// CHECK-NOFP16: [[META13]] = distinct !{[[META13]], [[META14:![0-9]+]], !"vuzpq_f16: %agg.result"}
-// CHECK-NOFP16: [[META14]] = distinct !{[[META14]], !"vuzpq_f16"}
-// CHECK-NOFP16: [[META15]] = !{[[META16:![0-9]+]]}
-// CHECK-NOFP16: [[META16]] = distinct !{[[META16]], [[META17:![0-9]+]], !"vtrn_f16: %agg.result"}
-// CHECK-NOFP16: [[META17]] = distinct !{[[META17]], !"vtrn_f16"}
-// CHECK-NOFP16: [[META18]] = !{[[META19:![0-9]+]]}
-// CHECK-NOFP16: [[META19]] = distinct !{[[META19]], [[META20:![0-9]+]], !"vtrnq_f16: %agg.result"}
-// CHECK-NOFP16: [[META20]] = distinct !{[[META20]], !"vtrnq_f16"}
+// CHECK-NOFP16: [[META2]] = !{[[META3:![0-9]+]]}
+// CHECK-NOFP16: [[META3]] = distinct !{[[META3]], [[META4:![0-9]+]], !"vzip_f16: %agg.result"}
+// CHECK-NOFP16: [[META4]] = distinct !{[[META4]], i1 false, !"vzip_f16"}
+// CHECK-NOFP16: [[META5]] = !{[[META6:![0-9]+]]}
+// CHECK-NOFP16: [[META6]] = distinct !{[[META6]], [[META7:![0-9]+]], !"vzipq_f16: %agg.result"}
+// CHECK-NOFP16: [[META7]] = distinct !{[[META7]], i1 false, !"vzipq_f16"}
+// CHECK-NOFP16: [[META8]] = !{[[META9:![0-9]+]]}
+// CHECK-NOFP16: [[META9]] = distinct !{[[META9]], [[META10:![0-9]+]], !"vuzp_f16: %agg.result"}
+// CHECK-NOFP16: [[META10]] = distinct !{[[META10]], i1 false, !"vuzp_f16"}
+// CHECK-NOFP16: [[META11]] = !{[[META12:![0-9]+]]}
+// CHECK-NOFP16: [[META12]] = distinct !{[[META12]], [[META13:![0-9]+]], !"vuzpq_f16: %agg.result"}
+// CHECK-NOFP16: [[META13]] = distinct !{[[META13]], i1 false, !"vuzpq_f16"}
+// CHECK-NOFP16: [[META14]] = !{[[META15:![0-9]+]]}
+// CHECK-NOFP16: [[META15]] = distinct !{[[META15]], [[META16:![0-9]+]], !"vtrn_f16: %agg.result"}
+// CHECK-NOFP16: [[META16]] = distinct !{[[META16]], i1 false, !"vtrn_f16"}
+// CHECK-NOFP16: [[META17]] = !{[[META18:![0-9]+]]}
+// CHECK-NOFP16: [[META18]] = distinct !{[[META18]], [[META19:![0-9]+]], !"vtrnq_f16: %agg.result"}
+// CHECK-NOFP16: [[META19]] = distinct !{[[META19]], i1 false, !"vtrnq_f16"}
//.
-// CHECK-FP16: [[META3]] = !{[[META4:![0-9]+]]}
-// CHECK-FP16: [[META4]] = distinct !{[[META4]], [[META5:![0-9]+]], !"vzip_f16: %agg.result"}
-// CHECK-FP16: [[META5]] = distinct !{[[META5]], !"vzip_f16"}
-// CHECK-FP16: [[META6]] = !{[[META7:![0-9]+]]}
-// CHECK-FP16: [[META7]] = distinct !{[[META7]], [[META8:![0-9]+]], !"vzipq_f16: %agg.result"}
-// CHECK-FP16: [[META8]] = distinct !{[[META8]], !"vzipq_f16"}
-// CHECK-FP16: [[META9]] = !{[[META10:![0-9]+]]}
-// CHECK-FP16: [[META10]] = distinct !{[[META10]], [[META11:![0-9]+]], !"vuzp_f16: %agg.result"}
-// CHECK-FP16: [[META11]] = distinct !{[[META11]], !"vuzp_f16"}
-// CHECK-FP16: [[META12]] = !{[[META13:![0-9]+]]}
-// CHECK-FP16: [[META13]] = distinct !{[[META13]], [[META14:![0-9]+]], !"vuzpq_f16: %agg.result"}
-// CHECK-FP16: [[META14]] = distinct !{[[META14]], !"vuzpq_f16"}
-// CHECK-FP16: [[META15]] = !{[[META16:![0-9]+]]}
-// CHECK-FP16: [[META16]] = distinct !{[[META16]], [[META17:![0-9]+]], !"vtrn_f16: %agg.result"}
-// CHECK-FP16: [[META17]] = distinct !{[[META17]], !"vtrn_f16"}
-// CHECK-FP16: [[META18]] = !{[[META19:![0-9]+]]}
-// CHECK-FP16: [[META19]] = distinct !{[[META19]], [[META20:![0-9]+]], !"vtrnq_f16: %agg.result"}
-// CHECK-FP16: [[META20]] = distinct !{[[META20]], !"vtrnq_f16"}
+// CHECK-FP16: [[META2]] = !{[[META3:![0-9]+]]}
+// CHECK-FP16: [[META3]] = distinct !{[[META3]], [[META4:![0-9]+]], !"vzip_f16: %agg.result"}
+// CHECK-FP16: [[META4]] = distinct !{[[META4]], i1 false, !"vzip_f16"}
+// CHECK-FP16: [[META5]] = !{[[META6:![0-9]+]]}
+// CHECK-FP16: [[META6]] = distinct !{[[META6]], [[META7:![0-9]+]], !"vzipq_f16: %agg.result"}
+// CHECK-FP16: [[META7]] = distinct !{[[META7]], i1 false, !"vzipq_f16"}
+// CHECK-FP16: [[META8]] = !{[[META9:![0-9]+]]}
+// CHECK-FP16: [[META9]] = distinct !{[[META9]], [[META10:![0-9]+]], !"vuzp_f16: %agg.result"}
+// CHECK-FP16: [[META10]] = distinct !{[[META10]], i1 false, !"vuzp_f16"}
+// CHECK-FP16: [[META11]] = !{[[META12:![0-9]+]]}
+// CHECK-FP16: [[META12]] = distinct !{[[META12]], [[META13:![0-9]+]], !"vuzpq_f16: %agg.result"}
+// CHECK-FP16: [[META13]] = distinct !{[[META13]], i1 false, !"vuzpq_f16"}
+// CHECK-FP16: [[META14]] = !{[[META15:![0-9]+]]}
+// CHECK-FP16: [[META15]] = distinct !{[[META15]], [[META16:![0-9]+]], !"vtrn_f16: %agg.result"}
+// CHECK-FP16: [[META16]] = distinct !{[[META16]], i1 false, !"vtrn_f16"}
+// CHECK-FP16: [[META17]] = !{[[META18:![0-9]+]]}
+// CHECK-FP16: [[META18]] = distinct !{[[META18]], [[META19:![0-9]+]], !"vtrnq_f16: %agg.result"}
+// CHECK-FP16: [[META19]] = distinct !{[[META19]], i1 false, !"vtrnq_f16"}
//.
diff --git a/clang/test/CodeGen/arm_neon_intrinsics.c b/clang/test/CodeGen/arm_neon_intrinsics.c
index d4bf8217d4eaff..b754cdcbce143d 100644
--- a/clang/test/CodeGen/arm_neon_intrinsics.c
+++ b/clang/test/CodeGen/arm_neon_intrinsics.c
@@ -27142,164 +27142,164 @@ poly16x8x2_t test_vzipq_p16(poly16x8_t a, poly16x8_t b) {
//.
// CHECK: [[META2]] = !{[[META3:![0-9]+]]}
// CHECK: [[META3]] = distinct !{[[META3]], [[META4:![0-9]+]], !"vtrn_s8: %agg.result"}
-// CHECK: [[META4]] = distinct !{[[META4]], !"vtrn_s8"}
+// CHECK: [[META4]] = distinct !{[[META4]], i1 false, !"vtrn_s8"}
// CHECK: [[META5]] = !{[[META6:![0-9]+]]}
// CHECK: [[META6]] = distinct !{[[META6]], [[META7:![0-9]+]], !"vtrn_s16: %agg.result"}
-// CHECK: [[META7]] = distinct !{[[META7]], !"vtrn_s16"}
+// CHECK: [[META7]] = distinct !{[[META7]], i1 false, !"vtrn_s16"}
// CHECK: [[META8]] = !{[[META9:![0-9]+]]}
// CHECK: [[META9]] = distinct !{[[META9]], [[META10:![0-9]+]], !"vtrn_s32: %agg.result"}
-// CHECK: [[META10]] = distinct !{[[META10]], !"vtrn_s32"}
+// CHECK: [[META10]] = distinct !{[[META10]], i1 false, !"vtrn_s32"}
// CHECK: [[META11]] = !{[[META12:![0-9]+]]}
// CHECK: [[META12]] = distinct !{[[META12]], [[META13:![0-9]+]], !"vtrn_u8: %agg.result"}
-// CHECK: [[META13]] = distinct !{[[META13]], !"vtrn_u8"}
+// CHECK: [[META13]] = distinct !{[[META13]], i1 false, !"vtrn_u8"}
// CHECK: [[META14]] = !{[[META15:![0-9]+]]}
// CHECK: [[META15]] = distinct !{[[META15]], [[META16:![0-9]+]], !"vtrn_u16: %agg.result"}
-// CHECK: [[META16]] = distinct !{[[META16]], !"vtrn_u16"}
+// CHECK: [[META16]] = distinct !{[[META16]], i1 false, !"vtrn_u16"}
// CHECK: [[META17]] = !{[[META18:![0-9]+]]}
// CHECK: [[META18]] = distinct !{[[META18]], [[META19:![0-9]+]], !"vtrn_u32: %agg.result"}
-// CHECK: [[META19]] = distinct !{[[META19]], !"vtrn_u32"}
+// CHECK: [[META19]] = distinct !{[[META19]], i1 false, !"vtrn_u32"}
// CHECK: [[META20]] = !{[[META21:![0-9]+]]}
// CHECK: [[META21]] = distinct !{[[META21]], [[META22:![0-9]+]], !"vtrn_f32: %agg.result"}
-// CHECK: [[META22]] = distinct !{[[META22]], !"vtrn_f32"}
+// CHECK: [[META22]] = distinct !{[[META22]], i1 false, !"vtrn_f32"}
// CHECK: [[META23]] = !{[[META24:![0-9]+]]}
// CHECK: [[META24]] = distinct !{[[META24]], [[META25:![0-9]+]], !"vtrn_p8: %agg.result"}
-// CHECK: [[META25]] = distinct !{[[META25]], !"vtrn_p8"}
+// CHECK: [[META25]] = distinct !{[[META25]], i1 false, !"vtrn_p8"}
// CHECK: [[META26]] = !{[[META27:![0-9]+]]}
// CHECK: [[META27]] = distinct !{[[META27]], [[META28:![0-9]+]], !"vtrn_p16: %agg.result"}
-// CHECK: [[META28]] = distinct !{[[META28]], !"vtrn_p16"}
+// CHECK: [[META28]] = distinct !{[[META28]], i1 false, !"vtrn_p16"}
// CHECK: [[META29]] = !{[[META30:![0-9]+]]}
// CHECK: [[META30]] = distinct !{[[META30]], [[META31:![0-9]+]], !"vtrnq_s8: %agg.result"}
-// CHECK: [[META31]] = distinct !{[[META31]], !"vtrnq_s8"}
+// CHECK: [[META31]] = distinct !{[[META31]], i1 false, !"vtrnq_s8"}
// CHECK: [[META32]] = !{[[META33:![0-9]+]]}
// CHECK: [[META33]] = distinct !{[[META33]], [[META34:![0-9]+]], !"vtrnq_s16: %agg.result"}
-// CHECK: [[META34]] = distinct !{[[META34]], !"vtrnq_s16"}
+// CHECK: [[META34]] = distinct !{[[META34]], i1 false, !"vtrnq_s16"}
// CHECK: [[META35]] = !{[[META36:![0-9]+]]}
// CHECK: [[META36]] = distinct !{[[META36]], [[META37:![0-9]+]], !"vtrnq_s32: %agg.result"}
-// CHECK: [[META37]] = distinct !{[[META37]], !"vtrnq_s32"}
+// CHECK: [[META37]] = distinct !{[[META37]], i1 false, !"vtrnq_s32"}
// CHECK: [[META38]] = !{[[META39:![0-9]+]]}
// CHECK: [[META39]] = distinct !{[[META39]], [[META40:![0-9]+]], !"vtrnq_u8: %agg.result"}
-// CHECK: [[META40]] = distinct !{[[META40]], !"vtrnq_u8"}
+// CHECK: [[META40]] = distinct !{[[META40]], i1 false, !"vtrnq_u8"}
// CHECK: [[META41]] = !{[[META42:![0-9]+]]}
// CHECK: [[META42]] = distinct !{[[META42]], [[META43:![0-9]+]], !"vtrnq_u16: %agg.result"}
-// CHECK: [[META43]] = distinct !{[[META43]], !"vtrnq_u16"}
+// CHECK: [[META43]] = distinct !{[[META43]], i1 false, !"vtrnq_u16"}
// CHECK: [[META44]] = !{[[META45:![0-9]+]]}
// CHECK: [[META45]] = distinct !{[[META45]], [[META46:![0-9]+]], !"vtrnq_u32: %agg.result"}
-// CHECK: [[META46]] = distinct !{[[META46]], !"vtrnq_u32"}
+// CHECK: [[META46]] = distinct !{[[META46]], i1 false, !"vtrnq_u32"}
// CHECK: [[META47]] = !{[[META48:![0-9]+]]}
// CHECK: [[META48]] = distinct !{[[META48]], [[META49:![0-9]+]], !"vtrnq_f32: %agg.result"}
-// CHECK: [[META49]] = distinct !{[[META49]], !"vtrnq_f32"}
+// CHECK: [[META49]] = distinct !{[[META49]], i1 false, !"vtrnq_f32"}
// CHECK: [[META50]] = !{[[META51:![0-9]+]]}
// CHECK: [[META51]] = distinct !{[[META51]], [[META52:![0-9]+]], !"vtrnq_p8: %agg.result"}
-// CHECK: [[META52]] = distinct !{[[META52]], !"vtrnq_p8"}
+// CHECK: [[META52]] = distinct !{[[META52]], i1 false, !"vtrnq_p8"}
// CHECK: [[META53]] = !{[[META54:![0-9]+]]}
// CHECK: [[META54]] = distinct !{[[META54]], [[META55:![0-9]+]], !"vtrnq_p16: %agg.result"}
-// CHECK: [[META55]] = distinct !{[[META55]], !"vtrnq_p16"}
+// CHECK: [[META55]] = distinct !{[[META55]], i1 false, !"vtrnq_p16"}
// CHECK: [[META56]] = !{[[META57:![0-9]+]]}
// CHECK: [[META57]] = distinct !{[[META57]], [[META58:![0-9]+]], !"vuzp_s8: %agg.result"}
-// CHECK: [[META58]] = distinct !{[[META58]], !"vuzp_s8"}
+// CHECK: [[META58]] = distinct !{[[META58]], i1 false, !"vuzp_s8"}
// CHECK: [[META59]] = !{[[META60:![0-9]+]]}
// CHECK: [[META60]] = distinct !{[[META60]], [[META61:![0-9]+]], !"vuzp_s16: %agg.result"}
-// CHECK: [[META61]] = distinct !{[[META61]], !"vuzp_s16"}
+// CHECK: [[META61]] = distinct !{[[META61]], i1 false, !"vuzp_s16"}
// CHECK: [[META62]] = !{[[META63:![0-9]+]]}
// CHECK: [[META63]] = distinct !{[[META63]], [[META64:![0-9]+]], !"vuzp_s32: %agg.result"}
-// CHECK: [[META64]] = distinct !{[[META64]], !"vuzp_s32"}
+// CHECK: [[META64]] = distinct !{[[META64]], i1 false, !"vuzp_s32"}
// CHECK: [[META65]] = !{[[META66:![0-9]+]]}
// CHECK: [[META66]] = distinct !{[[META66]], [[META67:![0-9]+]], !"vuzp_u8: %agg.result"}
-// CHECK: [[META67]] = distinct !{[[META67]], !"vuzp_u8"}
+// CHECK: [[META67]] = distinct !{[[META67]], i1 false, !"vuzp_u8"}
// CHECK: [[META68]] = !{[[META69:![0-9]+]]}
// CHECK: [[META69]] = distinct !{[[META69]], [[META70:![0-9]+]], !"vuzp_u16: %agg.result"}
-// CHECK: [[META70]] = distinct !{[[META70]], !"vuzp_u16"}
+// CHECK: [[META70]] = distinct !{[[META70]], i1 false, !"vuzp_u16"}
// CHECK: [[META71]] = !{[[META72:![0-9]+]]}
// CHECK: [[META72]] = distinct !{[[META72]], [[META73:![0-9]+]], !"vuzp_u32: %agg.result"}
-// CHECK: [[META73]] = distinct !{[[META73]], !"vuzp_u32"}
+// CHECK: [[META73]] = distinct !{[[META73]], i1 false, !"vuzp_u32"}
// CHECK: [[META74]] = !{[[META75:![0-9]+]]}
// CHECK: [[META75]] = distinct !{[[META75]], [[META76:![0-9]+]], !"vuzp_f32: %agg.result"}
-// CHECK: [[META76]] = distinct !{[[META76]], !"vuzp_f32"}
+// CHECK: [[META76]] = distinct !{[[META76]], i1 false, !"vuzp_f32"}
// CHECK: [[META77]] = !{[[META78:![0-9]+]]}
// CHECK: [[META78]] = distinct !{[[META78]], [[META79:![0-9]+]], !"vuzp_p8: %agg.result"}
-// CHECK: [[META79]] = distinct !{[[META79]], !"vuzp_p8"}
+// CHECK: [[META79]] = distinct !{[[META79]], i1 false, !"vuzp_p8"}
// CHECK: [[META80]] = !{[[META81:![0-9]+]]}
// CHECK: [[META81]] = distinct !{[[META81]], [[META82:![0-9]+]], !"vuzp_p16: %agg.result"}
-// CHECK: [[META82]] = distinct !{[[META82]], !"vuzp_p16"}
+// CHECK: [[META82]] = distinct !{[[META82]], i1 false, !"vuzp_p16"}
// CHECK: [[META83]] = !{[[META84:![0-9]+]]}
// CHECK: [[META84]] = distinct !{[[META84]], [[META85:![0-9]+]], !"vuzpq_s8: %agg.result"}
-// CHECK: [[META85]] = distinct !{[[META85]], !"vuzpq_s8"}
+// CHECK: [[META85]] = distinct !{[[META85]], i1 false, !"vuzpq_s8"}
// CHECK: [[META86]] = !{[[META87:![0-9]+]]}
// CHECK: [[META87]] = distinct !{[[META87]], [[META88:![0-9]+]], !"vuzpq_s16: %agg.result"}
-// CHECK: [[META88]] = distinct !{[[META88]], !"vuzpq_s16"}
+// CHECK: [[META88]] = distinct !{[[META88]], i1 false, !"vuzpq_s16"}
// CHECK: [[META89]] = !{[[META90:![0-9]+]]}
// CHECK: [[META90]] = distinct !{[[META90]], [[META91:![0-9]+]], !"vuzpq_s32: %agg.result"}
-// CHECK: [[META91]] = distinct !{[[META91]], !"vuzpq_s32"}
+// CHECK: [[META91]] = distinct !{[[META91]], i1 false, !"vuzpq_s32"}
// CHECK: [[META92]] = !{[[META93:![0-9]+]]}
// CHECK: [[META93]] = distinct !{[[META93]], [[META94:![0-9]+]], !"vuzpq_u8: %agg.result"}
-// CHECK: [[META94]] = distinct !{[[META94]], !"vuzpq_u8"}
+// CHECK: [[META94]] = distinct !{[[META94]], i1 false, !"vuzpq_u8"}
// CHECK: [[META95]] = !{[[META96:![0-9]+]]}
// CHECK: [[META96]] = distinct !{[[META96]], [[META97:![0-9]+]], !"vuzpq_u16: %agg.result"}
-// CHECK: [[META97]] = distinct !{[[META97]], !"vuzpq_u16"}
+// CHECK: [[META97]] = distinct !{[[META97]], i1 false, !"vuzpq_u16"}
// CHECK: [[META98]] = !{[[META99:![0-9]+]]}
// CHECK: [[META99]] = distinct !{[[META99]], [[META100:![0-9]+]], !"vuzpq_u32: %agg.result"}
-// CHECK: [[META100]] = distinct !{[[META100]], !"vuzpq_u32"}
+// CHECK: [[META100]] = distinct !{[[META100]], i1 false, !"vuzpq_u32"}
// CHECK: [[META101]] = !{[[META102:![0-9]+]]}
// CHECK: [[META102]] = distinct !{[[META102]], [[META103:![0-9]+]], !"vuzpq_f32: %agg.result"}
-// CHECK: [[META103]] = distinct !{[[META103]], !"vuzpq_f32"}
+// CHECK: [[META103]] = distinct !{[[META103]], i1 false, !"vuzpq_f32"}
// CHECK: [[META104]] = !{[[META105:![0-9]+]]}
// CHECK: [[META105]] = distinct !{[[META105]], [[META106:![0-9]+]], !"vuzpq_p8: %agg.result"}
-// CHECK: [[META106]] = distinct !{[[META106]], !"vuzpq_p8"}
+// CHECK: [[META106]] = distinct !{[[META106]], i1 false, !"vuzpq_p8"}
// CHECK: [[META107]] = !{[[META108:![0-9]+]]}
// CHECK: [[META108]] = distinct !{[[META108]], [[META109:![0-9]+]], !"vuzpq_p16: %agg.result"}
-// CHECK: [[META109]] = distinct !{[[META109]], !"vuzpq_p16"}
+// CHECK: [[META109]] = distinct !{[[META109]], i1 false, !"vuzpq_p16"}
// CHECK: [[META110]] = !{[[META111:![0-9]+]]}
// CHECK: [[META111]] = distinct !{[[META111]], [[META112:![0-9]+]], !"vzip_s8: %agg.result"}
-// CHECK: [[META112]] = distinct !{[[META112]], !"vzip_s8"}
+// CHECK: [[META112]] = distinct !{[[META112]], i1 false, !"vzip_s8"}
// CHECK: [[META113]] = !{[[META114:![0-9]+]]}
// CHECK: [[META114]] = distinct !{[[META114]], [[META115:![0-9]+]], !"vzip_s16: %agg.result"}
-// CHECK: [[META115]] = distinct !{[[META115]], !"vzip_s16"}
+// CHECK: [[META115]] = distinct !{[[META115]], i1 false, !"vzip_s16"}
// CHECK: [[META116]] = !{[[META117:![0-9]+]]}
// CHECK: [[META117]] = distinct !{[[META117]], [[META118:![0-9]+]], !"vzip_s32: %agg.result"}
-// CHECK: [[META118]] = distinct !{[[META118]], !"vzip_s32"}
+// CHECK: [[META118]] = distinct !{[[META118]], i1 false, !"vzip_s32"}
// CHECK: [[META119]] = !{[[META120:![0-9]+]]}
// CHECK: [[META120]] = distinct !{[[META120]], [[META121:![0-9]+]], !"vzip_u8: %agg.result"}
-// CHECK: [[META121]] = distinct !{[[META121]], !"vzip_u8"}
+// CHECK: [[META121]] = distinct !{[[META121]], i1 false, !"vzip_u8"}
// CHECK: [[META122]] = !{[[META123:![0-9]+]]}
// CHECK: [[META123]] = distinct !{[[META123]], [[META124:![0-9]+]], !"vzip_u16: %agg.result"}
-// CHECK: [[META124]] = distinct !{[[META124]], !"vzip_u16"}
+// CHECK: [[META124]] = distinct !{[[META124]], i1 false, !"vzip_u16"}
// CHECK: [[META125]] = !{[[META126:![0-9]+]]}
// CHECK: [[META126]] = distinct !{[[META126]], [[META127:![0-9]+]], !"vzip_u32: %agg.result"}
-// CHECK: [[META127]] = distinct !{[[META127]], !"vzip_u32"}
+// CHECK: [[META127]] = distinct !{[[META127]], i1 false, !"vzip_u32"}
// CHECK: [[META128]] = !{[[META129:![0-9]+]]}
// CHECK: [[META129]] = distinct !{[[META129]], [[META130:![0-9]+]], !"vzip_f32: %agg.result"}
-// CHECK: [[META130]] = distinct !{[[META130]], !"vzip_f32"}
+// CHECK: [[META130]] = distinct !{[[META130]], i1 false, !"vzip_f32"}
// CHECK: [[META131]] = !{[[META132:![0-9]+]]}
// CHECK: [[META132]] = distinct !{[[META132]], [[META133:![0-9]+]], !"vzip_p8: %agg.result"}
-// CHECK: [[META133]] = distinct !{[[META133]], !"vzip_p8"}
+// CHECK: [[META133]] = distinct !{[[META133]], i1 false, !"vzip_p8"}
// CHECK: [[META134]] = !{[[META135:![0-9]+]]}
// CHECK: [[META135]] = distinct !{[[META135]], [[META136:![0-9]+]], !"vzip_p16: %agg.result"}
-// CHECK: [[META136]] = distinct !{[[META136]], !"vzip_p16"}
+// CHECK: [[META136]] = distinct !{[[META136]], i1 false, !"vzip_p16"}
// CHECK: [[META137]] = !{[[META138:![0-9]+]]}
// CHECK: [[META138]] = distinct !{[[META138]], [[META139:![0-9]+]], !"vzipq_s8: %agg.result"}
-// CHECK: [[META139]] = distinct !{[[META139]], !"vzipq_s8"}
+// CHECK: [[META139]] = distinct !{[[META139]], i1 false, !"vzipq_s8"}
// CHECK: [[META140]] = !{[[META141:![0-9]+]]}
// CHECK: [[META141]] = distinct !{[[META141]], [[META142:![0-9]+]], !"vzipq_s16: %agg.result"}
-// CHECK: [[META142]] = distinct !{[[META142]], !"vzipq_s16"}
+// CHECK: [[META142]] = distinct !{[[META142]], i1 false, !"vzipq_s16"}
// CHECK: [[META143]] = !{[[META144:![0-9]+]]}
// CHECK: [[META144]] = distinct !{[[META144]], [[META145:![0-9]+]], !"vzipq_s32: %agg.result"}
-// CHECK: [[META145]] = distinct !{[[META145]], !"vzipq_s32"}
+// CHECK: [[META145]] = distinct !{[[META145]], i1 false, !"vzipq_s32"}
// CHECK: [[META146]] = !{[[META147:![0-9]+]]}
// CHECK: [[META147]] = distinct !{[[META147]], [[META148:![0-9]+]], !"vzipq_u8: %agg.result"}
-// CHECK: [[META148]] = distinct !{[[META148]], !"vzipq_u8"}
+// CHECK: [[META148]] = distinct !{[[META148]], i1 false, !"vzipq_u8"}
// CHECK: [[META149]] = !{[[META150:![0-9]+]]}
// CHECK: [[META150]] = distinct !{[[META150]], [[META151:![0-9]+]], !"vzipq_u16: %agg.result"}
-// CHECK: [[META151]] = distinct !{[[META151]], !"vzipq_u16"}
+// CHECK: [[META151]] = distinct !{[[META151]], i1 false, !"vzipq_u16"}
// CHECK: [[META152]] = !{[[META153:![0-9]+]]}
// CHECK: [[META153]] = distinct !{[[META153]], [[META154:![0-9]+]], !"vzipq_u32: %agg.result"}
-// CHECK: [[META154]] = distinct !{[[META154]], !"vzipq_u32"}
+// CHECK: [[META154]] = distinct !{[[META154]], i1 false, !"vzipq_u32"}
// CHECK: [[META155]] = !{[[META156:![0-9]+]]}
// CHECK: [[META156]] = distinct !{[[META156]], [[META157:![0-9]+]], !"vzipq_f32: %agg.result"}
-// CHECK: [[META157]] = distinct !{[[META157]], !"vzipq_f32"}
+// CHECK: [[META157]] = distinct !{[[META157]], i1 false, !"vzipq_f32"}
// CHECK: [[META158]] = !{[[META159:![0-9]+]]}
// CHECK: [[META159]] = distinct !{[[META159]], [[META160:![0-9]+]], !"vzipq_p8: %agg.result"}
-// CHECK: [[META160]] = distinct !{[[META160]], !"vzipq_p8"}
+// CHECK: [[META160]] = distinct !{[[META160]], i1 false, !"vzipq_p8"}
// CHECK: [[META161]] = !{[[META162:![0-9]+]]}
// CHECK: [[META162]] = distinct !{[[META162]], [[META163:![0-9]+]], !"vzipq_p16: %agg.result"}
-// CHECK: [[META163]] = distinct !{[[META163]], !"vzipq_p16"}
+// CHECK: [[META163]] = distinct !{[[META163]], i1 false, !"vzipq_p16"}
//.
diff --git a/clang/test/OpenMP/taskloop_strictmodifier_codegen.cpp b/clang/test/OpenMP/taskloop_strictmodifier_codegen.cpp
index 76dcad0b19a42c..e4f98484a28fc6 100644
--- a/clang/test/OpenMP/taskloop_strictmodifier_codegen.cpp
+++ b/clang/test/OpenMP/taskloop_strictmodifier_codegen.cpp
@@ -355,7 +355,7 @@ struct S {
// CHECK: [[LONG_TBAA30]] = !{[[META22]], [[META17]], i64 48}
// CHECK: [[META31]] = !{[[META32:![0-9]+]]}
// CHECK: [[META32]] = distinct !{[[META32]], [[META33:![0-9]+]], !".omp_outlined..5: %__context"}
-// CHECK: [[META33]] = distinct !{[[META33]], !".omp_outlined..5"}
+// CHECK: [[META33]] = distinct !{[[META33]], i1 false, !".omp_outlined..5"}
// CHECK: [[INTPTR_TBAA34]] = !{[[META35:![0-9]+]], [[META25]], i64 0}
// CHECK: [[META35]] = !{!"_ZTSZ4mainE3$_3", [[META25]], i64 0, [[META27]], i64 8}
// CHECK: [[META36]] = !{}
@@ -368,7 +368,7 @@ struct S {
// CHECK: [[META43]] = !{!"p1 _ZTS1S", [[META11]], i64 0}
// CHECK: [[META44]] = !{[[META45:![0-9]+]]}
// CHECK: [[META45]] = distinct !{[[META45]], [[META46:![0-9]+]], !".omp_outlined..9: %__context"}
-// CHECK: [[META46]] = distinct !{[[META46]], !".omp_outlined..9"}
+// CHECK: [[META46]] = distinct !{[[META46]], i1 false, !".omp_outlined..9"}
// CHECK: [[INTPTR_TBAA47]] = !{[[META48:![0-9]+]], [[META25]], i64 8}
// CHECK: [[META48]] = !{!"_ZTSZN1SC1EiEUt_", [[META43]], i64 0, [[META25]], i64 8}
//.
diff --git a/llvm/docs/LangRef.md b/llvm/docs/LangRef.md
index 27e20fde8dc5f0..5ab20d0644a85b 100644
--- a/llvm/docs/LangRef.md
+++ b/llvm/docs/LangRef.md
@@ -7617,11 +7617,20 @@ used for example during inlining. As the noalias function parameters are
turned into noalias scope metadata, a new domain is used every time the
function is inlined.
-The metadata identifying each domain is itself a list containing one or two
+The metadata identifying each domain is itself a list containing two or three
entries. The first entry is the name of the domain. Note that if the name is a
string then it can be combined across functions and translation units. A
-self-reference can be used to create globally unique domain names. A
-descriptive string may optionally be provided as a second list entry.
+self-reference can be used to create globally unique domain names. The second
+entry is an `i1` constant that marks the domain as having disjoint scopes when
+it is `true`. A descriptive string may optionally be provided as a third list
+entry.
+
+If an alias scope domain has disjoint scopes, tagging an instruction with an
+`alias.scope` within that domain implicitly tags that instruction with a
+`noalias` set containing all scopes in that domain not present in the
+instruction's `!alias.scope` list. This makes it unnecessary to spell out the
+complement of each scope when a group of N pointers is known to be mutually
+non-aliasing.
The metadata identifying each scope is also itself a list containing two or
three entries. The first entry is the name of the scope. Note that if the name
@@ -7634,8 +7643,8 @@ For example,
```llvm
; Two scope domains:
-!0 = !{!0}
-!1 = !{!1}
+!0 = !{!0, i1 false}
+!1 = !{!1, i1 false}
; Some scopes in these domains:
!2 = !{!2, !0}
@@ -7663,6 +7672,30 @@ store float %2, ptr %arrayidx.i2, align 4, !noalias !6
store float %0, ptr %arrayidx.i, align 4, !noalias !7
```
+And, with a domain whose scopes are disjoint,
+
+```llvm
+; A domain with disjoint scopes and three scopes within it:
+!0 = !{!0, i1 true, !"disjoint domain"}
+!1 = !{!1, !0}
+!2 = !{!2, !0}
+!3 = !{!3, !0}
+
+; Some scope lists:
+!4 = !{!1}
+!5 = !{!2}
+!6 = !{!2, !3}
+!7 = !{!1, !3}
+
+; These two instructions don't alias, because tagging them with !1 and !2
+; implicitly tags them with !noalias !6 and !noalias !7, respectively:
+%0 = load float, ptr %a, align 4, !alias.scope !4
+store float %0, ptr %b, align 4, !alias.scope !5
+
+; This instruction could be either in scope !1 or !3, so is implicitly !noalias !5.
+%1 = load float, ptr %ac, align 4, !alias.scope !7
+```
+
(fpmath-metadata)=
#### '`fpmath`' Metadata
@@ -26019,7 +26052,7 @@ exit:
ret void
}
-!0 = !{!0} ; domain
+!0 = !{!0, i1 false} ; domain
!1 = !{!1, !0} ; scope
!2 = !{!1} ; scope list
```
diff --git a/llvm/include/llvm/Analysis/ScopedNoAliasAA.h b/llvm/include/llvm/Analysis/ScopedNoAliasAA.h
index 76536ea1ab5730..98cc3161f7f538 100644
--- a/llvm/include/llvm/Analysis/ScopedNoAliasAA.h
+++ b/llvm/include/llvm/Analysis/ScopedNoAliasAA.h
@@ -58,6 +58,12 @@ class ScopedNoAliasAAResult : public AAResultBase {
LLVM_ABI static bool mayAliasInScopes(const MDNode *Scopes,
const MDNode *NoAlias);
+
+ /// Return false if two accesses in the scope lists \p Scopes1 and \p Scopes2
+ /// are kept apart by the implicit noalias sets of a domain with disjoint
+ /// scopes.
+ LLVM_ABI static bool mayAliasInDisjointDomains(const MDNode *Scopes1,
+ const MDNode *Scopes2);
};
/// Analysis pass providing a never-invalidated alias analysis result.
diff --git a/llvm/include/llvm/IR/MDBuilder.h b/llvm/include/llvm/IR/MDBuilder.h
index e88de73567c358..1b60fd7cb73062 100644
--- a/llvm/include/llvm/IR/MDBuilder.h
+++ b/llvm/include/llvm/IR/MDBuilder.h
@@ -182,12 +182,12 @@ class MDBuilder {
return createAnonymousAARoot();
}
- /// Return metadata appropriate for an alias scope domain node.
+ /// Return metadata appropriate for an alias scope domain node, whose scopes
+ /// are disjoint if \p DisjointScopes is set.
/// Each returned node is distinct from all other metadata and will never
/// be identified (uniqued) with anything else.
- MDNode *createAnonymousAliasScopeDomain(StringRef Name = StringRef()) {
- return createAnonymousAARoot(Name);
- }
+ LLVM_ABI MDNode *createAnonymousAliasScopeDomain(StringRef Name = StringRef(),
+ bool DisjointScopes = false);
/// Return metadata appropriate for an alias scope root node.
/// Each returned node is distinct from all other metadata and will never
@@ -203,9 +203,10 @@ class MDBuilder {
LLVM_ABI MDNode *createTBAARoot(StringRef Name);
/// Return metadata appropriate for an alias scope domain node with
- /// the given name. This may be identified (uniqued) with other roots with
- /// the same name.
- LLVM_ABI MDNode *createAliasScopeDomain(StringRef Name);
+ /// the given name, whose scopes are disjoint if \p DisjointScopes is set.
+ /// This may be identified (uniqued) with other roots with the same name.
+ LLVM_ABI MDNode *createAliasScopeDomain(StringRef Name,
+ bool DisjointScopes = false);
/// Return metadata appropriate for an alias scope node with
/// the given name. This may be identified (uniqued) with other scopes with
diff --git a/llvm/include/llvm/IR/Metadata.h b/llvm/include/llvm/IR/Metadata.h
index 017fd98e704ea3..4ae9225b7ad48d 100644
--- a/llvm/include/llvm/IR/Metadata.h
+++ b/llvm/include/llvm/IR/Metadata.h
@@ -1596,6 +1596,34 @@ void TempMDNodeDeleter::operator()(MDNode *Node) const {
MDNode::deleteTemporary(Node);
}
+/// Wrapper around alias scope domain metedata to allow accessing their fields,
+/// including surfacing the optional `i1 disjoint` parameter, hiding the details
+/// of the metadata encoding.
+class AliasScopeDomainNode {
+ const MDNode *Node = nullptr;
+
+public:
+ AliasScopeDomainNode() = default;
+ explicit AliasScopeDomainNode(const MDNode *N) : Node(N) {}
+
+ /// Get the MDNode for this AliasScopeDomainNode.
+ const MDNode *getNode() const { return Node; }
+
+ StringRef getName() const {
+ if (Node->getNumOperands() > 2)
+ if (MDString *N = dyn_cast_or_null<MDString>(Node->getOperand(2)))
+ return N->getString();
+ return StringRef();
+ }
+
+ /// Return true if this domain has disjoint scopes.
+ bool hasDisjointScopes() const {
+ const Constant *Disjoint =
+ mdconst::dyn_extract_or_null<Constant>(Node->getOperand(1));
+ return Disjoint && Disjoint->isOneValue();
+ }
+};
+
/// This is a simple wrapper around an MDNode which provides a higher-level
/// interface by hiding the details of how alias analysis information is encoded
/// in its operands.
diff --git a/llvm/lib/Analysis/ScopedNoAliasAA.cpp b/llvm/lib/Analysis/ScopedNoAliasAA.cpp
index 4a0f8b6d1605de..f005f6ac927f38 100644
--- a/llvm/lib/Analysis/ScopedNoAliasAA.cpp
+++ b/llvm/lib/Analysis/ScopedNoAliasAA.cpp
@@ -12,9 +12,10 @@
// Alias-analysis scopes are defined by an id (which can be a string or some
// other metadata node), a domain node, and an optional descriptive string.
// A domain is defined by an id (which can be a string or some other metadata
-// node), and an optional descriptive string.
+// node), a flag saying whether its scopes are disjoint, and an optional
+// descriptive string.
//
-// !dom0 = metadata !{ metadata !"domain of foo()" }
+// !dom0 = metadata !{ metadata !"domain of foo()", i1 false }
// !scope1 = metadata !{ metadata !scope1, metadata !dom0, metadata !"scope 1" }
// !scope2 = metadata !{ metadata !scope2, metadata !dom0, metadata !"scope 2" }
//
@@ -29,6 +30,17 @@
// scopes in that domain of some other instruction, then the two memory
// accesses are assumed not to alias.
//
+// A domain can also declare its scopes to be disjoint, in which case tagging
+// an instruction with an alias scope from that domain implicitly tags it with
+// a noalias set containing every other scope in that domain:
+//
+// !dom1 = metadata !{ metadata !dom1, i1 true, metadata !"disjoint domain" }
+// !scope3 = metadata !{ metadata !scope3, metadata !dom1 }
+// !scope4 = metadata !{ metadata !scope4, metadata !dom1 }
+//
+// ... = load %ptr3, !alias.scope !{ !scope3 } ; doesn't alias the load below
+// ... = load %ptr4, !alias.scope !{ !scope4 }
+//
//===----------------------------------------------------------------------===//
#include "llvm/Analysis/ScopedNoAliasAA.h"
@@ -68,6 +80,9 @@ AliasResult ScopedNoAliasAAResult::alias(const MemoryLocation &LocA,
if (!mayAliasInScopes(BScopes, ANoAlias))
return AliasResult::NoAlias;
+ if (!mayAliasInDisjointDomains(AScopes, BScopes))
+ return AliasResult::NoAlias;
+
return AliasResult::MayAlias;
}
@@ -91,6 +106,10 @@ ModRefInfo ScopedNoAliasAAResult::getModRefInfo(const CallBase *Call,
Loc.AATags.NoAlias))
return ModRefInfo::NoModRef;
+ if (!mayAliasInDisjointDomains(
+ Loc.AATags.Scope, Call->getMetadata(LLVMContext::MD_alias_scope)))
+ return ModRefInfo::NoModRef;
+
return ModRefInfo::ModRef;
}
@@ -108,6 +127,10 @@ ModRefInfo ScopedNoAliasAAResult::getModRefInfo(const FenceInst *F,
Loc.AATags.NoAlias))
return ModRefInfo::NoModRef;
+ if (!mayAliasInDisjointDomains(Loc.AATags.Scope,
+ F->getMetadata(LLVMContext::MD_alias_scope)))
+ return ModRefInfo::NoModRef;
+
return ModRefInfo::ModRef;
}
@@ -125,6 +148,11 @@ ModRefInfo ScopedNoAliasAAResult::getModRefInfo(const CallBase *Call1,
Call1->getMetadata(LLVMContext::MD_noalias)))
return ModRefInfo::NoModRef;
+ if (!mayAliasInDisjointDomains(
+ Call1->getMetadata(LLVMContext::MD_alias_scope),
+ Call2->getMetadata(LLVMContext::MD_alias_scope)))
+ return ModRefInfo::NoModRef;
+
return ModRefInfo::ModRef;
}
@@ -176,6 +204,37 @@ bool ScopedNoAliasAAResult::mayAliasInScopes(const MDNode *Scopes,
return true;
}
+bool ScopedNoAliasAAResult::mayAliasInDisjointDomains(const MDNode *Scopes1,
+ const MDNode *Scopes2) {
+ if (!Scopes1 || !Scopes2)
+ return true;
+
+ // Collect the domains with disjoint scopes that the first access is in.
+ SmallPtrSet<const MDNode *, 16> Domains;
+ for (const MDOperand &MDOp : Scopes1->operands())
+ if (const MDNode *MD = dyn_cast<MDNode>(MDOp))
+ if (const MDNode *Domain = AliasScopeNode(MD).getDomain())
+ if (AliasScopeDomainNode(Domain).hasDisjointScopes())
+ Domains.insert(Domain);
+
+ // Each access is implicitly noalias with every scope of such a domain it is
+ // not itself in, so the accesses don't alias if, for some domain, they have
+ // no scope in common.
+ for (const MDNode *Domain : Domains) {
+ SmallPtrSet<const MDNode *, 16> Nodes2;
+ collectMDInDomain(Scopes2, Domain, Nodes2);
+ if (Nodes2.empty())
+ continue;
+
+ SmallPtrSet<const MDNode *, 16> Nodes1;
+ collectMDInDomain(Scopes1, Domain, Nodes1);
+ if (!llvm::set_intersects(Nodes1, Nodes2))
+ return false;
+ }
+
+ return true;
+}
+
AnalysisKey ScopedNoAliasAA::Key;
ScopedNoAliasAAResult ScopedNoAliasAA::run(Function &F,
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
index d75e85b0b0f9e1..e2ef1b99965358 100644
--- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
+++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
@@ -6995,6 +6995,15 @@ Error BitcodeReader::parseFunctionBody(Function *F) {
cast<CallInst>(I)->setAttributes(PAL);
if (isa<DbgInfoIntrinsic>(I))
SeenDebugIntrinsic = true;
+ if (auto *Decl = dyn_cast<NoAliasScopeDeclInst>(I)) {
+ unsigned ArgNo = Intrinsic::NoAliasScopeDeclScopeArg;
+ if (auto *ListAsValue =
+ dyn_cast<MetadataAsValue>(Decl->getOperand(ArgNo)))
+ if (auto *List = dyn_cast<MDNode>(ListAsValue->getMetadata()))
+ Decl->setOperand(
+ ArgNo, MetadataAsValue::get(
+ Context, MDLoader->upgradeAliasScopeList(List)));
+ }
if (Error Err = propagateAttributeTypes(cast<CallBase>(I), ArgTyIDs)) {
I->deleteValue();
return Err;
diff --git a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
index 6f1fbd627edbcf..cebc5267b474e7 100644
--- a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
+++ b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
@@ -335,6 +335,67 @@ Metadata *BitcodeReaderMetadataList::resolveTypeArray(Metadata *MaybeTuple) {
return MDTuple::get(Context, Ops);
}
+/// Rebuild \p Old with \p Ops, keeping its identity: a self reference has to
+/// point at the replacement, and a distinct node must not be uniqued.
+static MDNode *rebuildAliasScopeNode(MDNode *Old,
+ SmallVectorImpl<Metadata *> &Ops) {
+ LLVMContext &Context = Old->getContext();
+ if (Ops[0] != Old)
+ return Old->isDistinct() ? MDNode::getDistinct(Context, Ops)
+ : MDNode::get(Context, Ops);
+
+ Ops[0] = nullptr;
+ MDNode *New = MDNode::getDistinct(Context, Ops);
+ New->replaceOperandWith(0, New);
+ return New;
+}
+
+static MDNode *upgradeAliasScopeDomain(MDNode *Domain,
+ DenseMap<MDNode *, MDNode *> &Upgraded) {
+ unsigned NumOperands = Domain->getNumOperands();
+ bool HadDescription = NumOperands == 2;
+ // Already upgraded, or invalid and left to the verifier.
+ if (NumOperands == 0 || NumOperands > 2 ||
+ (HadDescription && mdconst::hasa<ConstantInt>(Domain->getOperand(1))))
+ return Domain;
+
+ if (MDNode *Upgrade = Upgraded.lookup(Domain))
+ return Upgrade;
+
+ LLVMContext &Context = Domain->getContext();
+ SmallVector<Metadata *, 3> Ops = {
+ Domain->getOperand(0),
+ ConstantAsMetadata::get(ConstantInt::getFalse(Context))};
+ if (HadDescription)
+ Ops.push_back(Domain->getOperand(1));
+
+ MDNode *Upgrade = rebuildAliasScopeNode(Domain, Ops);
+ Upgraded[Domain] = Upgrade;
+ return Upgrade;
+}
+
+static MDNode *upgradeAliasScope(MDNode *Scope,
+ DenseMap<MDNode *, MDNode *> &Upgraded) {
+ if (MDNode *Upgrade = Upgraded.lookup(Scope))
+ return Upgrade;
+
+ auto *Domain = Scope->getNumOperands() >= 2
+ ? dyn_cast_or_null<MDNode>(Scope->getOperand(1))
+ : nullptr;
+ if (!Domain)
+ return Scope;
+
+ MDNode *UpgradedDomain = upgradeAliasScopeDomain(Domain, Upgraded);
+ if (UpgradedDomain == Domain)
+ return Scope;
+
+ SmallVector<Metadata *, 3> Ops(Scope->op_begin(), Scope->op_end());
+ Ops[1] = UpgradedDomain;
+ MDNode *Upgrade = rebuildAliasScopeNode(Scope, Ops);
+ Upgraded[Scope] = Upgrade;
+ return Upgrade;
+}
+
namespace {
class PlaceholderQueue {
@@ -460,6 +521,10 @@ class MetadataLoader::MetadataLoaderImpl {
bool StripTBAA = false;
bool HasSeenOldLoopTags = false;
+
+ /// Rebuilt alias scopes and domains, so that upgraded domains get reused
+ /// correctly and to memoize.
+ DenseMap<MDNode *, MDNode *> UpgradedAliasScopes;
bool NeedUpgradeToDIGlobalVariableExpression = false;
bool NeedDeclareExpressionUpgrade = false;
@@ -798,6 +863,29 @@ class MetadataLoader::MetadataLoaderImpl {
bool hasSeenOldLoopTags() const { return HasSeenOldLoopTags; }
+ /// Mark any domains in \p ScopeList that don't have a disjointness
+ /// flag as non-disjoint. Returns the original list if there are no changes.
+ MDNode *upgradeAliasScopeList(MDNode *ScopeList) {
+ if (MDNode *Upgrade = UpgradedAliasScopes.lookup(ScopeList))
+ return Upgrade;
+
+ SmallVector<Metadata *, 4> Ops;
+ bool Changed = false;
+ for (const MDOperand &Op : ScopeList->operands()) {
+ Metadata *Scope = Op;
+ if (auto *ScopeNode = dyn_cast<MDNode>(Op))
+ Scope = upgradeAliasScope(ScopeNode, UpgradedAliasScopes);
+ Changed |= Scope != Op.get();
+ Ops.push_back(Scope);
+ }
+ if (!Changed)
+ return ScopeList;
+
+ MDNode *Upgrade = MDNode::get(ScopeList->getContext(), Ops);
+ UpgradedAliasScopes[ScopeList] = Upgrade;
+ return Upgrade;
+ }
+
Error parseMetadataAttachment(Function &F,
ArrayRef<Instruction *> InstructionList);
@@ -2648,6 +2736,11 @@ Error MetadataLoader::MetadataLoaderImpl::parseMetadataAttachment(
assert(!MD->isTemporary() && "should load MDs before attachments");
MD = UpgradeTBAANode(*MD);
}
+
+ if (I->second == LLVMContext::MD_alias_scope ||
+ I->second == LLVMContext::MD_noalias)
+ MD = upgradeAliasScopeList(MD);
+
Inst->setMetadata(I->second, MD);
}
break;
@@ -2765,3 +2858,7 @@ void MetadataLoader::shrinkTo(unsigned N) { return Pimpl->shrinkTo(N); }
void MetadataLoader::upgradeDebugIntrinsics(Function &F) {
return Pimpl->upgradeDebugIntrinsics(F);
}
+
+MDNode *MetadataLoader::upgradeAliasScopeList(MDNode *ScopeList) {
+ return Pimpl->upgradeAliasScopeList(ScopeList);
+}
diff --git a/llvm/lib/Bitcode/Reader/MetadataLoader.h b/llvm/lib/Bitcode/Reader/MetadataLoader.h
index bab855ca635910..04efa4836dea5b 100644
--- a/llvm/lib/Bitcode/Reader/MetadataLoader.h
+++ b/llvm/lib/Bitcode/Reader/MetadataLoader.h
@@ -25,6 +25,7 @@ class BitstreamCursor;
class DISubprogram;
class Function;
class Instruction;
+class MDNode;
class Metadata;
class Module;
class Type;
@@ -92,6 +93,10 @@ class MetadataLoader {
/// Perform bitcode upgrades on llvm.dbg.* calls.
void upgradeDebugIntrinsics(Function &F);
+
+ /// Mark any domains in \p ScopeList that don't have a disjointness
+ /// flag as non-disjoint. Returns the original list if there are no changes.
+ MDNode *upgradeAliasScopeList(MDNode *ScopeList);
};
}
diff --git a/llvm/lib/IR/AutoUpgrade.cpp b/llvm/lib/IR/AutoUpgrade.cpp
index 75fc03c22222bb..cd9d64551840b5 100644
--- a/llvm/lib/IR/AutoUpgrade.cpp
+++ b/llvm/lib/IR/AutoUpgrade.cpp
@@ -28,6 +28,7 @@
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalValue.h"
#include "llvm/IR/IRBuilder.h"
+#include "llvm/IR/InstIterator.h"
#include "llvm/IR/InstVisitor.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/IntrinsicInst.h"
diff --git a/llvm/lib/IR/MDBuilder.cpp b/llvm/lib/IR/MDBuilder.cpp
index 9a8e417b43ba79..93314a2bdc0bb2 100644
--- a/llvm/lib/IR/MDBuilder.cpp
+++ b/llvm/lib/IR/MDBuilder.cpp
@@ -210,6 +210,20 @@ MDNode *MDBuilder::createAnonymousAARoot(StringRef Name, MDNode *Extra) {
return Root;
}
+MDNode *MDBuilder::createAnonymousAliasScopeDomain(StringRef Name,
+ bool DisjointScopes) {
+ SmallVector<Metadata *, 3> Args = {
+ nullptr, createConstant(ConstantInt::getBool(Context, DisjointScopes))};
+ if (!Name.empty())
+ Args.push_back(createString(Name));
+ MDNode *Domain = MDNode::getDistinct(Context, Args);
+
+ // Replace the reserved operand with the domain node itself, as is done for
+ // any other self-referential root.
+ Domain->replaceOperandWith(0, Domain);
+ return Domain;
+}
+
MDNode *MDBuilder::createTBAARoot(StringRef Name) {
return MDNode::get(Context, createString(Name));
}
@@ -226,8 +240,10 @@ MDNode *MDBuilder::createTBAANode(StringRef Name, MDNode *Parent,
return MDNode::get(Context, {createString(Name), Parent});
}
-MDNode *MDBuilder::createAliasScopeDomain(StringRef Name) {
- return MDNode::get(Context, createString(Name));
+MDNode *MDBuilder::createAliasScopeDomain(StringRef Name, bool DisjointScopes) {
+ return MDNode::get(
+ Context, {createString(Name),
+ createConstant(ConstantInt::getBool(Context, DisjointScopes))});
}
MDNode *MDBuilder::createAliasScope(StringRef Name, MDNode *Domain) {
diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp
index 8fc72bdf2f4f41..78f8b7f17f9f24 100644
--- a/llvm/lib/IR/Verifier.cpp
+++ b/llvm/lib/IR/Verifier.cpp
@@ -5713,14 +5713,18 @@ void Verifier::visitAliasScopeMetadata(const MDNode *MD) {
Check(Domain != nullptr, "second scope operand must be MDNode", MD);
unsigned NumDomainOps = Domain->getNumOperands();
- Check(NumDomainOps >= 1 && NumDomainOps <= 2,
- "domain must have one or two operands", Domain);
+ Check(NumDomainOps >= 2 && NumDomainOps <= 3,
+ "domain must have two or three operands", Domain);
Check(Domain->getOperand(0).get() == Domain ||
isa<MDString>(Domain->getOperand(0)),
"first domain operand must be self-referential or string", Domain);
- if (NumDomainOps == 2)
- Check(isa<MDString>(Domain->getOperand(1)),
- "second domain operand must be string (if used)", Domain);
+ const auto *Disjoint =
+ mdconst::dyn_extract_or_null<ConstantInt>(Domain->getOperand(1));
+ Check(Disjoint && Disjoint->getBitWidth() == 1,
+ "second domain operand must be an i1 constant", Domain);
+ if (NumDomainOps == 3)
+ Check(isa<MDString>(Domain->getOperand(2)),
+ "third domain operand must be string (if used)", Domain);
}
void Verifier::visitAliasScopeListMetadata(const MDNode *MD) {
diff --git a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
index 4b09510933d0cb..d53210ad089bd4 100644
--- a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
@@ -5963,6 +5963,10 @@ bool InstCombinerImpl::run() {
class AliasScopeTracker {
SmallPtrSet<const MDNode *, 8> UsedAliasScopesAndLists;
SmallPtrSet<const MDNode *, 8> UsedNoAliasScopesAndLists;
+ // The domains with disjoint scopes of which more than one scope is used by
+ // !alias.scope, along with the first such scope seen for each domain.
+ SmallDenseMap<const MDNode *, const MDNode *, 4> FirstScopeInDisjointDomain;
+ SmallPtrSet<const MDNode *, 4> UsedDisjointDomains;
public:
void analyse(Instruction *I) {
@@ -5970,17 +5974,29 @@ class AliasScopeTracker {
if (!I->hasMetadataOtherThanDebugLoc())
return;
- auto Track = [](Metadata *ScopeList, auto &Container) {
+ auto Track = [](Metadata *ScopeList, auto &Container, auto OnScope) {
const auto *MDScopeList = dyn_cast_or_null<MDNode>(ScopeList);
if (!MDScopeList || !Container.insert(MDScopeList).second)
return;
for (const auto &MDOperand : MDScopeList->operands())
- if (auto *MDScope = dyn_cast<MDNode>(MDOperand))
+ if (auto *MDScope = dyn_cast<MDNode>(MDOperand)) {
Container.insert(MDScope);
+ OnScope(MDScope);
+ }
};
- Track(I->getMetadata(LLVMContext::MD_alias_scope), UsedAliasScopesAndLists);
- Track(I->getMetadata(LLVMContext::MD_noalias), UsedNoAliasScopesAndLists);
+ Track(I->getMetadata(LLVMContext::MD_alias_scope), UsedAliasScopesAndLists,
+ [this](const MDNode *MDScope) {
+ const MDNode *Domain = AliasScopeNode(MDScope).getDomain();
+ if (!Domain || !AliasScopeDomainNode(Domain).hasDisjointScopes())
+ return;
+ auto [It, Inserted] =
+ FirstScopeInDisjointDomain.try_emplace(Domain, MDScope);
+ if (!Inserted && It->second != MDScope)
+ UsedDisjointDomains.insert(Domain);
+ });
+ Track(I->getMetadata(LLVMContext::MD_noalias), UsedNoAliasScopesAndLists,
+ [](const MDNode *) {});
}
bool isNoAliasScopeDeclDead(Instruction *Inst) {
@@ -5994,9 +6010,16 @@ class AliasScopeTracker {
assert(MDSL->getNumOperands() == 1 &&
"llvm.experimental.noalias.scope should refer to a single scope");
auto &MDOperand = MDSL->getOperand(0);
- if (auto *MD = dyn_cast<MDNode>(MDOperand))
- return !UsedAliasScopesAndLists.contains(MD) ||
- !UsedNoAliasScopesAndLists.contains(MD);
+ if (auto *MD = dyn_cast<MDNode>(MDOperand)) {
+ if (!UsedAliasScopesAndLists.contains(MD))
+ return true;
+ // A scope of a domain with disjoint scopes carries an implicit noalias
+ // set, so its declaration matters without a noalias use as long as some
+ // other scope of that domain is used as well.
+ if (UsedDisjointDomains.contains(AliasScopeNode(MD).getDomain()))
+ return false;
+ return !UsedNoAliasScopesAndLists.contains(MD);
+ }
// Not an MDNode ? throw away.
return true;
diff --git a/llvm/lib/Transforms/Utils/CloneFunction.cpp b/llvm/lib/Transforms/Utils/CloneFunction.cpp
index c2a2138148168b..d64ba932ba42d2 100644
--- a/llvm/lib/Transforms/Utils/CloneFunction.cpp
+++ b/llvm/lib/Transforms/Utils/CloneFunction.cpp
@@ -1156,6 +1156,20 @@ void llvm::cloneNoAliasScopes(ArrayRef<MDNode *> NoAliasDeclScopes,
StringRef Ext, LLVMContext &Context) {
MDBuilder MDB(Context);
+ // A cloned scope has to go into a clone of its domain if that domain has
+ // disjoint scopes: the copies of a duplicated access are in the same memory
+ // region, so they must not become implicitly noalias with each other.
+ DenseMap<const MDNode *, MDNode *> ClonedDomains;
+ auto GetClonedDomain = [&](const MDNode *Domain) {
+ if (!Domain || !AliasScopeDomainNode(Domain).hasDisjointScopes())
+ return const_cast<MDNode *>(Domain);
+ MDNode *&ClonedDomain = ClonedDomains[Domain];
+ if (!ClonedDomain)
+ ClonedDomain = MDB.createAnonymousAliasScopeDomain(
+ AliasScopeDomainNode(Domain).getName(), /*DisjointScopes=*/true);
+ return ClonedDomain;
+ };
+
for (MDNode *ScopeList : NoAliasDeclScopes) {
for (const MDOperand &MDOp : ScopeList->operands()) {
if (MDNode *MD = dyn_cast<MDNode>(MDOp)) {
@@ -1169,7 +1183,7 @@ void llvm::cloneNoAliasScopes(ArrayRef<MDNode *> NoAliasDeclScopes,
Name = std::string(Ext);
MDNode *NewScope = MDB.createAnonymousAliasScope(
- const_cast<MDNode *>(SNANode.getDomain()), Name);
+ GetClonedDomain(SNANode.getDomain()), Name);
ClonedScopes.insert(std::make_pair(MD, NewScope));
}
}
diff --git a/llvm/test/Analysis/AliasSet/intrinsics.ll b/llvm/test/Analysis/AliasSet/intrinsics.ll
index a0a319ae3e683b..4293f6d35dad5a 100644
--- a/llvm/test/Analysis/AliasSet/intrinsics.ll
+++ b/llvm/test/Analysis/AliasSet/intrinsics.ll
@@ -110,4 +110,4 @@ declare void @llvm.experimental.noalias.scope.decl(metadata)
!0 = !{ !1 }
!1 = distinct !{ !1, !2, !"test5: var" }
-!2 = distinct !{ !2, !"test5" }
+!2 = distinct !{!2, i1 false, !"test5"}
diff --git a/llvm/test/Analysis/BasicAA/noalias-scope-decl.ll b/llvm/test/Analysis/BasicAA/noalias-scope-decl.ll
index 99b0c6e38cf372..559b1f799b9100 100644
--- a/llvm/test/Analysis/BasicAA/noalias-scope-decl.ll
+++ b/llvm/test/Analysis/BasicAA/noalias-scope-decl.ll
@@ -27,4 +27,4 @@ attributes #0 = { nounwind }
!0 = !{ !1 }
!1 = distinct !{ !1, !2, !"test1: var" }
-!2 = distinct !{ !2, !"test1" }
+!2 = distinct !{!2, i1 false, !"test1"}
diff --git a/llvm/test/Analysis/CostModel/X86/free-intrinsics.ll b/llvm/test/Analysis/CostModel/X86/free-intrinsics.ll
index 49f1bd83e96ddd..34025be30f10d7 100644
--- a/llvm/test/Analysis/CostModel/X86/free-intrinsics.ll
+++ b/llvm/test/Analysis/CostModel/X86/free-intrinsics.ll
@@ -81,7 +81,7 @@ declare void @llvm.var.annotation(ptr, ptr, ptr, i32, ptr)
!3 = !DIFile(filename: "debug-label.c", directory: "./")
!4 = !{ !5 }
!5 = distinct !{ !5, !6, !"foo: var" }
-!6 = distinct !{ !6, !"foo" }
+!6 = distinct !{!6, i1 false, !"foo"}
!7 = !{i32 2, !"Debug Info Version", i32 3}
!8 = !DILocation(line: 0, scope: !1)
!9 = distinct !DICompileUnit(language: DW_LANG_C11, file: !3, producer: "clang")
diff --git a/llvm/test/Analysis/CostModel/free-intrinsics-datalayout.ll b/llvm/test/Analysis/CostModel/free-intrinsics-datalayout.ll
index 4eeac08318cda5..cfdb27db87fac7 100644
--- a/llvm/test/Analysis/CostModel/free-intrinsics-datalayout.ll
+++ b/llvm/test/Analysis/CostModel/free-intrinsics-datalayout.ll
@@ -89,7 +89,7 @@ declare void @llvm.var.annotation(ptr, ptr, ptr, i32, ptr)
!3 = !DIFile(filename: "debug-label.c", directory: "./")
!4 = !{ !5 }
!5 = distinct !{ !5, !6, !"foo: var" }
-!6 = distinct !{ !6, !"foo" }
+!6 = distinct !{!6, i1 false, !"foo"}
!7 = !{i32 2, !"Debug Info Version", i32 3}
!8 = !DILocation(line: 0, scope: !1)
!9 = distinct !DICompileUnit(language: DW_LANG_C11, file: !3, producer: "clang")
diff --git a/llvm/test/Analysis/CostModel/free-intrinsics-no_info.ll b/llvm/test/Analysis/CostModel/free-intrinsics-no_info.ll
index eab298a9bedf58..e46b17f0ed2a17 100644
--- a/llvm/test/Analysis/CostModel/free-intrinsics-no_info.ll
+++ b/llvm/test/Analysis/CostModel/free-intrinsics-no_info.ll
@@ -87,7 +87,7 @@ declare void @llvm.var.annotation(ptr, ptr, ptr, i32, ptr)
!3 = !DIFile(filename: "debug-label.c", directory: "./")
!4 = !{ !5 }
!5 = distinct !{ !5, !6, !"foo: var" }
-!6 = distinct !{ !6, !"foo" }
+!6 = distinct !{!6, i1 false, !"foo"}
!7 = !{i32 2, !"Debug Info Version", i32 3}
!8 = !DILocation(line: 0, scope: !1)
!9 = distinct !DICompileUnit(language: DW_LANG_C11, file: !3, producer: "clang")
diff --git a/llvm/test/Analysis/LoopAccessAnalysis/noalias-scope-decl.ll b/llvm/test/Analysis/LoopAccessAnalysis/noalias-scope-decl.ll
index df0695f216aa44..738042e8524074 100644
--- a/llvm/test/Analysis/LoopAccessAnalysis/noalias-scope-decl.ll
+++ b/llvm/test/Analysis/LoopAccessAnalysis/noalias-scope-decl.ll
@@ -97,7 +97,7 @@ declare void @llvm.experimental.noalias.scope.decl(metadata)
!0 = !{!1}
!1 = distinct !{!1, !2}
-!2 = distinct !{!2}
+!2 = distinct !{!2, i1 false}
!3 = !{!4}
!4 = distinct !{!4, !5}
-!5 = distinct !{!5}
+!5 = distinct !{!5, i1 false}
diff --git a/llvm/test/Analysis/MemorySSA/noalias-scope-decl.ll b/llvm/test/Analysis/MemorySSA/noalias-scope-decl.ll
index c17b78c920eaf6..0c2dc859b0ca0e 100644
--- a/llvm/test/Analysis/MemorySSA/noalias-scope-decl.ll
+++ b/llvm/test/Analysis/MemorySSA/noalias-scope-decl.ll
@@ -20,4 +20,4 @@ define i32 @foo(ptr %a, ptr %b, i1 %c) {
!0 = !{ !1 }
!1 = distinct !{ !1, !2, !"foo: var" }
-!2 = distinct !{ !2, !"foo" }
+!2 = distinct !{!2, i1 false, !"foo"}
diff --git a/llvm/test/Analysis/ScopedNoAliasAA/alias-scope-merging.ll b/llvm/test/Analysis/ScopedNoAliasAA/alias-scope-merging.ll
index 36d79f9e44b961..3d74cc82f05a5b 100644
--- a/llvm/test/Analysis/ScopedNoAliasAA/alias-scope-merging.ll
+++ b/llvm/test/Analysis/ScopedNoAliasAA/alias-scope-merging.ll
@@ -30,11 +30,11 @@ declare void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1)
!0 = !{!1, !7}
!1 = distinct !{!1, !3, !"callee0: %a"}
!2 = distinct !{!2, !3, !"callee0: %b"}
-!3 = distinct !{!3, !"callee0"}
+!3 = distinct !{!3, i1 false, !"callee0"}
!4 = !{!2, !5}
!5 = distinct !{!5, !6, !"callee1: %a"}
-!6 = distinct !{!6, !"callee1"}
+!6 = distinct !{!6, i1 false, !"callee1"}
!7 = distinct !{!7, !8, !"callee2: %a"}
-!8 = distinct !{!8, !"callee2"}
+!8 = distinct !{!8, i1 false, !"callee2"}
diff --git a/llvm/test/Analysis/ScopedNoAliasAA/basic-domains.ll b/llvm/test/Analysis/ScopedNoAliasAA/basic-domains.ll
index 9f417a6e373c13..64f5f4e6e670a7 100644
--- a/llvm/test/Analysis/ScopedNoAliasAA/basic-domains.ll
+++ b/llvm/test/Analysis/ScopedNoAliasAA/basic-domains.ll
@@ -22,8 +22,8 @@ entry:
attributes #0 = { nounwind uwtable }
-!2 = !{!2, !"some domain"}
-!5 = !{!5, !"some other domain"}
+!2 = !{!2, i1 false, !"some domain"}
+!5 = !{!5, i1 false, !"some other domain"}
; Two scopes (which must be self-referential to avoid being "uniqued"):
!1 = !{!1, !2, !"a scope in dom0"}
diff --git a/llvm/test/Analysis/ScopedNoAliasAA/basic.ll b/llvm/test/Analysis/ScopedNoAliasAA/basic.ll
index e7f1a5f1470352..1baeee47b106c6 100644
--- a/llvm/test/Analysis/ScopedNoAliasAA/basic.ll
+++ b/llvm/test/Analysis/ScopedNoAliasAA/basic.ll
@@ -22,6 +22,6 @@ entry:
attributes #0 = { nounwind uwtable }
-!0 = !{!0, !"some domain"}
+!0 = !{!0, i1 false, !"some domain"}
!1 = !{!1, !0, !"some scope"}
!2 = !{!1}
diff --git a/llvm/test/Analysis/ScopedNoAliasAA/basic2.ll b/llvm/test/Analysis/ScopedNoAliasAA/basic2.ll
index 751d0452baa532..5df253d76daaa0 100644
--- a/llvm/test/Analysis/ScopedNoAliasAA/basic2.ll
+++ b/llvm/test/Analysis/ScopedNoAliasAA/basic2.ll
@@ -34,7 +34,7 @@ attributes #0 = { nounwind uwtable }
!0 = !{!1, !3}
!1 = !{!1, !2, !"some scope"}
-!2 = !{!2, !"some domain"}
+!2 = !{!2, i1 false, !"some domain"}
!3 = !{!3, !2, !"some other scope"}
!4 = !{!1}
!5 = !{!3}
diff --git a/llvm/test/Analysis/ScopedNoAliasAA/disjoint-domains.ll b/llvm/test/Analysis/ScopedNoAliasAA/disjoint-domains.ll
new file mode 100644
index 00000000000000..9b807d0fe85e44
--- /dev/null
+++ b/llvm/test/Analysis/ScopedNoAliasAA/disjoint-domains.ll
@@ -0,0 +1,71 @@
+; RUN: opt < %s -aa-pipeline=basic-aa,scoped-noalias-aa -passes=aa-eval -evaluate-aa-metadata -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s
+
+define void @foo1(ptr nocapture %a, ptr nocapture readonly %c) {
+entry:
+; CHECK-LABEL: Function: foo1
+ %0 = load float, ptr %c, align 4, !alias.scope !3
+ %arrayidx.i = getelementptr inbounds float, ptr %a, i64 5
+ store float %0, ptr %arrayidx.i, align 4, !alias.scope !4
+
+; CHECK: NoAlias: %0 = load float, ptr %c, align 4, !alias.scope !0 <-> store float %0, ptr %arrayidx.i, align 4, !alias.scope !3
+ ret void
+}
+
+define void @foo2(ptr nocapture %a, ptr nocapture readonly %c) {
+entry:
+; CHECK-LABEL: Function: foo2
+ %0 = load float, ptr %c, align 4, !alias.scope !6
+ %arrayidx.i = getelementptr inbounds float, ptr %a, i64 5
+ store float %0, ptr %arrayidx.i, align 4, !alias.scope !3
+ %arrayidx.i2 = getelementptr inbounds float, ptr %a, i64 15
+ store float %0, ptr %arrayidx.i2, align 4, !alias.scope !5
+
+; CHECK: MayAlias: %0 = load float, ptr %c, align 4, !alias.scope !0 <-> store float %0, ptr %arrayidx.i, align 4, !alias.scope !4
+; CHECK: NoAlias: %0 = load float, ptr %c, align 4, !alias.scope !0 <-> store float %0, ptr %arrayidx.i2, align 4, !alias.scope !5
+; CHECK: NoAlias: store float %0, ptr %arrayidx.i2, align 4, !alias.scope !5 <-> store float %0, ptr %arrayidx.i, align 4, !alias.scope !4
+ ret void
+}
+
+define void @foo3(ptr nocapture %a, ptr nocapture readonly %c) {
+entry:
+; CHECK-LABEL: Function: foo3
+ %0 = load float, ptr %c, align 4, !alias.scope !9
+ %arrayidx.i = getelementptr inbounds float, ptr %a, i64 5
+ store float %0, ptr %arrayidx.i, align 4, !alias.scope !10
+
+; CHECK: MayAlias: %0 = load float, ptr %c, align 4, !alias.scope !0 <-> store float %0, ptr %arrayidx.i, align 4, !alias.scope !3
+ ret void
+}
+
+define void @foo4(ptr nocapture %a, ptr nocapture readonly %c) {
+entry:
+; CHECK-LABEL: Function: foo4
+ %0 = load float, ptr %c, align 4, !alias.scope !3
+ %arrayidx.i = getelementptr inbounds float, ptr %a, i64 5
+ store float %0, ptr %arrayidx.i, align 4, !alias.scope !13
+
+; CHECK: MayAlias: %0 = load float, ptr %c, align 4, !alias.scope !0 <-> store float %0, ptr %arrayidx.i, align 4, !alias.scope !3
+ ret void
+}
+
+!0 = !{!0, i1 true, !"disjoint domain"}
+!1 = !{!1, !0, !"scope 1"}
+!2 = !{!2, !0, !"scope 2"}
+!12 = !{!12, !0, !"scope 3"}
+
+!3 = !{!1}
+!4 = !{!2}
+!5 = !{!12}
+!6 = !{!1, !2}
+
+!7 = !{!7, i1 false, !"plain domain"}
+!8 = !{!8, !7, !"scope 1"}
+!11 = !{!11, !7, !"scope 2"}
+
+!9 = !{!8}
+!10 = !{!11}
+
+!14 = !{!14, i1 true, !"another disjoint domain"}
+!15 = !{!15, !14, !"scope 1"}
+
+!13 = !{!15}
diff --git a/llvm/test/Analysis/ScopedNoAliasAA/fence-modref.ll b/llvm/test/Analysis/ScopedNoAliasAA/fence-modref.ll
index 0ac6fa2fe2facb..bb7a069ed221b7 100644
--- a/llvm/test/Analysis/ScopedNoAliasAA/fence-modref.ll
+++ b/llvm/test/Analysis/ScopedNoAliasAA/fence-modref.ll
@@ -64,7 +64,7 @@ define i32 @fence_partial_noalias(ptr %p) {
!0 = !{!1}
!1 = distinct !{!1, !2, !"arg_scope"}
-!2 = distinct !{!2, !"kernel_domain"}
+!2 = distinct !{!2, i1 false, !"kernel_domain"}
!3 = !{!4}
!4 = distinct !{!4, !2, !"other_arg_scope"}
!5 = !{!1, !4}
diff --git a/llvm/test/Assembler/incomplete-ir-metadata.ll b/llvm/test/Assembler/incomplete-ir-metadata.ll
index fdf7b4ee0ebd23..e45b252a129499 100644
--- a/llvm/test/Assembler/incomplete-ir-metadata.ll
+++ b/llvm/test/Assembler/incomplete-ir-metadata.ll
@@ -26,9 +26,9 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
!100 = !{!101}
!101 = !{!101, !102}
-!102 = !{!102}
+!102 = !{!102, i1 false}
;.
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
-; CHECK: [[META2]] = distinct !{[[META2]]}
+; CHECK: [[META2]] = distinct !{[[META2]], i1 false}
;.
diff --git a/llvm/test/Bitcode/upgrade-alias-scope-domains.ll b/llvm/test/Bitcode/upgrade-alias-scope-domains.ll
new file mode 100644
index 00000000000000..b32604a572b3b9
--- /dev/null
+++ b/llvm/test/Bitcode/upgrade-alias-scope-domains.ll
@@ -0,0 +1,56 @@
+; RUN: llvm-as -disable-verify < %s | llvm-dis | FileCheck %s
+
+define void @test(ptr %p, ptr %q) {
+; CHECK-LABEL: define void @test(
+; CHECK: call void @llvm.experimental.noalias.scope.decl(metadata [[SELF_SCOPES:![0-9]+]])
+; CHECK: load i8, ptr %p, align 1, !alias.scope [[SELF_SCOPES]], !noalias [[NAMED_SCOPES:![0-9]+]]
+; CHECK: store i8 %v, ptr %q, align 1, !alias.scope [[NAMED_SCOPES]], !noalias [[SELF_SCOPES]]
+ call void @llvm.experimental.noalias.scope.decl(metadata !0)
+ %v = load i8, ptr %p, !alias.scope !0, !noalias !3
+ store i8 %v, ptr %q, !alias.scope !3, !noalias !0
+ ret void
+}
+
+define void @shares_the_domain(ptr %p, ptr %q) {
+; CHECK-LABEL: define void @shares_the_domain(
+; CHECK: load i8, ptr %p, align 1, !alias.scope [[SELF_SCOPES]], !noalias [[NAMED_SCOPES]]
+ %v = load i8, ptr %p, !alias.scope !0, !noalias !3
+ ret void
+}
+
+declare void @llvm.experimental.noalias.scope.decl(metadata)
+
+!0 = !{!1}
+!1 = distinct !{!1, !2, !"self-referential scope"}
+!2 = distinct !{!2, !"self-referential domain"}
+!3 = !{!4}
+!4 = !{!"named scope", !5}
+!5 = !{!"named domain"}
+!6 = !{!7}
+!7 = distinct !{!"same name", !8}
+!8 = distinct !{!"same domain name"}
+!9 = !{!10}
+!10 = distinct !{!"same name", !11}
+!11 = distinct !{!"same domain name"}
+
+define void @distinct_domains_sharing_a_name(ptr %p, ptr %q) {
+; CHECK-LABEL: define void @distinct_domains_sharing_a_name(
+; CHECK: load i8, ptr %p, align 1, !alias.scope [[SCOPES_A:![0-9]+]]
+; CHECK: store i8 %v, ptr %q, align 1, !noalias [[SCOPES_B:![0-9]+]]
+ %v = load i8, ptr %p, !alias.scope !6
+ store i8 %v, ptr %q, !noalias !9
+ ret void
+}
+
+; CHECK-DAG: [[SELF_SCOPES]] = !{[[SELF_SCOPE:![0-9]+]]}
+; CHECK-DAG: [[SELF_SCOPE]] = distinct !{[[SELF_SCOPE]], [[SELF_DOMAIN:![0-9]+]], !"self-referential scope"}
+; CHECK-DAG: [[SELF_DOMAIN]] = distinct !{[[SELF_DOMAIN]], i1 false, !"self-referential domain"}
+; CHECK-DAG: [[NAMED_SCOPES]] = !{[[NAMED_SCOPE:![0-9]+]]}
+; CHECK-DAG: [[NAMED_SCOPE]] = !{!"named scope", [[NAMED_DOMAIN:![0-9]+]]}
+; CHECK-DAG: [[NAMED_DOMAIN]] = !{!"named domain", i1 false}
+; CHECK-DAG: [[SCOPES_A]] = !{[[SCOPE_A:![0-9]+]]}
+; CHECK-DAG: [[SCOPE_A]] = distinct !{!"same name", [[DOMAIN_A:![0-9]+]]}
+; CHECK-DAG: [[DOMAIN_A]] = distinct !{!"same domain name", i1 false}
+; CHECK-DAG: [[SCOPES_B]] = !{[[SCOPE_B:![0-9]+]]}
+; CHECK-DAG: [[SCOPE_B]] = distinct !{!"same name", [[DOMAIN_B:![0-9]+]]}
+; CHECK-DAG: [[DOMAIN_B]] = distinct !{!"same domain name", i1 false}
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll b/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll
index bf13d22cf05a81..36a87a5d5fa5ed 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll
@@ -2502,7 +2502,7 @@ define void @test.llvm.noalias.scope.decl(ptr %P, ptr %Q) nounwind ssp {
!3 = !{ !4 }
!4 = distinct !{ !4, !5, !"test1: var" }
-!5 = distinct !{ !5, !"test1" }
+!5 = distinct !{!5, i1 false, !"test1"}
declare void @llvm.sideeffect()
diff --git a/llvm/test/CodeGen/AArch64/memcpy-scoped-aa.ll b/llvm/test/CodeGen/AArch64/memcpy-scoped-aa.ll
index cc27fd75a8b20a..880830e14f36f3 100644
--- a/llvm/test/CodeGen/AArch64/memcpy-scoped-aa.ll
+++ b/llvm/test/CodeGen/AArch64/memcpy-scoped-aa.ll
@@ -2,7 +2,7 @@
; RUN: llc -mtriple=aarch64-linux-gnu -o - %s | FileCheck %s
; RUN: llc -mtriple=aarch64-linux-gnu -stop-after=finalize-isel -o - %s | FileCheck --check-prefix=MIR %s
-; MIR-DAG: ![[DOMAIN:[0-9]+]] = distinct !{!{{[0-9]+}}, !"bax"}
+; MIR-DAG: ![[DOMAIN:[0-9]+]] = distinct !{!{{[0-9]+}}, i1 false, !"bax"}
; MIR-DAG: ![[SCOPE0:[0-9]+]] = distinct !{!{{[0-9]+}}, ![[DOMAIN]], !"bax: %p"}
; MIR-DAG: ![[SCOPE1:[0-9]+]] = distinct !{!{{[0-9]+}}, ![[DOMAIN]], !"bax: %q"}
; MIR-DAG: ![[SET0:[0-9]+]] = !{![[SCOPE0]]}
@@ -128,7 +128,7 @@ declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg)
declare ptr @mempcpy(ptr, ptr, i64)
-!0 = distinct !{!0, !"bax"}
+!0 = distinct !{!0, i1 false, !"bax"}
!1 = distinct !{!1, !0, !"bax: %p"}
!2 = !{!1}
!3 = distinct !{!3, !0, !"bax: %q"}
diff --git a/llvm/test/CodeGen/AArch64/merge-scoped-aa-store.ll b/llvm/test/CodeGen/AArch64/merge-scoped-aa-store.ll
index 6b2a8c5aaf8b8c..6bf12acd6ee275 100644
--- a/llvm/test/CodeGen/AArch64/merge-scoped-aa-store.ll
+++ b/llvm/test/CodeGen/AArch64/merge-scoped-aa-store.ll
@@ -3,7 +3,7 @@
; Ensure the scoped AA metadata is still retained after store merging.
-; MIR-DAG: ![[DOMAIN:[0-9]+]] = distinct !{!{{[0-9]+}}, !"domain"}
+; MIR-DAG: ![[DOMAIN:[0-9]+]] = distinct !{!{{[0-9]+}}, i1 false, !"domain"}
; MIR-DAG: ![[SCOPE0:[0-9]+]] = distinct !{!{{[0-9]+}}, ![[DOMAIN]], !"scope 0"}
; MIR-DAG: ![[SCOPE1:[0-9]+]] = distinct !{!{{[0-9]+}}, ![[DOMAIN]], !"scope 1"}
; MIR-DAG: ![[SCOPE2:[0-9]+]] = distinct !{!{{[0-9]+}}, ![[DOMAIN]], !"scope 2"}
@@ -60,7 +60,7 @@ define void @blam1(ptr %g0, ptr %g1) {
!1 = !{!3}
!2 = !{!2, !4, !"scope 0"}
!3 = !{!3, !4, !"scope 1"}
-!4 = !{!4, !"domain"}
+!4 = !{!4, i1 false, !"domain"}
!5 = !{!7}
!6 = !{!8}
!7 = !{!7, !4, !"scope 2"}
diff --git a/llvm/test/CodeGen/AArch64/vector_merge_dep_check.ll b/llvm/test/CodeGen/AArch64/vector_merge_dep_check.ll
index 89b3b8906f7d28..4bc19e955cd2b9 100644
--- a/llvm/test/CodeGen/AArch64/vector_merge_dep_check.ll
+++ b/llvm/test/CodeGen/AArch64/vector_merge_dep_check.ll
@@ -30,7 +30,7 @@ attributes #0 = { noinline norecurse nounwind ssp uwtable "disable-tail-calls"="
!0 = !{!"Snapdragon LLVM ARM Compiler 3.8.0 (based on LLVM 3.8.0)"}
!1 = distinct !{!1, !2, !"polly.alias.scope.rhs"}
-!2 = distinct !{!2, !"polly.alias.scope.domain"}
+!2 = distinct !{!2, i1 false, !"polly.alias.scope.domain"}
!3 = !{!4, !5, !6, !7, !8}
!4 = distinct !{!4, !2, !"polly.alias.scope.blockB"}
!5 = distinct !{!5, !2, !"polly.alias.scope.add28.lcssa.reg2mem"}
diff --git a/llvm/test/CodeGen/AMDGPU/lds-dma-workgroup-release.ll b/llvm/test/CodeGen/AMDGPU/lds-dma-workgroup-release.ll
index a958563be40074..081a1bb71e2871 100644
--- a/llvm/test/CodeGen/AMDGPU/lds-dma-workgroup-release.ll
+++ b/llvm/test/CodeGen/AMDGPU/lds-dma-workgroup-release.ll
@@ -513,7 +513,7 @@ main_body:
ret void
}
-!100 = !{!100}
+!100 = !{!100, i1 false}
!101 = !{!101, !100}
!102 = !{!101}
!103 = !{!103, !100}
diff --git a/llvm/test/CodeGen/AMDGPU/lower-intrinsics-noalias-metadata.ll b/llvm/test/CodeGen/AMDGPU/lower-intrinsics-noalias-metadata.ll
index c336d5d370621a..0fc6b5c0d7e838 100644
--- a/llvm/test/CodeGen/AMDGPU/lower-intrinsics-noalias-metadata.ll
+++ b/llvm/test/CodeGen/AMDGPU/lower-intrinsics-noalias-metadata.ll
@@ -166,7 +166,7 @@ bb:
declare void @llvm.amdgcn.s.barrier()
declare void @llvm.amdgcn.s.cluster.barrier()
-!0 = distinct !{!0, !"domain"}
+!0 = distinct !{!0, i1 false, !"domain"}
!2 = distinct !{!2, !0, !"global_scope"}
!3 = distinct !{!3, !0, !"lds_scope"}
!1 = !{!2}
diff --git a/llvm/test/CodeGen/AMDGPU/lower-kernargs.ll b/llvm/test/CodeGen/AMDGPU/lower-kernargs.ll
index 3abeae4c34fa1d..b166549089f342 100644
--- a/llvm/test/CodeGen/AMDGPU/lower-kernargs.ll
+++ b/llvm/test/CodeGen/AMDGPU/lower-kernargs.ll
@@ -36,7 +36,7 @@ define amdgpu_kernel void @kern_i8_noundef(i8 noundef %arg) #0 {
; HSA-LABEL: @kern_i8_noundef(
; HSA-NEXT: [[KERN_I8_NOUNDEF_KERNARG_SEGMENT:%.*]] = call nonnull align 16 dereferenceable(264) ptr addrspace(4) @llvm.amdgcn.kernarg.segment.ptr()
; HSA-NEXT: [[ARG_KERNARG_OFFSET_ALIGN_DOWN:%.*]] = getelementptr inbounds i8, ptr addrspace(4) [[KERN_I8_NOUNDEF_KERNARG_SEGMENT]], i64 0
-; HSA-NEXT: [[TMP1:%.*]] = load i32, ptr addrspace(4) [[ARG_KERNARG_OFFSET_ALIGN_DOWN]], align 16, !invariant.load [[META0]]{{$}}
+; HSA-NEXT: [[TMP1:%.*]] = load i32, ptr addrspace(4) [[ARG_KERNARG_OFFSET_ALIGN_DOWN]], align 16, !invariant.load [[META0]]
; HSA-NEXT: [[TMP2:%.*]] = trunc i32 [[TMP1]] to i8
; HSA-NEXT: store i8 [[TMP2]], ptr addrspace(1) poison, align 1
; HSA-NEXT: ret void
@@ -44,7 +44,7 @@ define amdgpu_kernel void @kern_i8_noundef(i8 noundef %arg) #0 {
; MESA-LABEL: @kern_i8_noundef(
; MESA-NEXT: [[KERN_I8_NOUNDEF_KERNARG_SEGMENT:%.*]] = call nonnull align 16 dereferenceable(260) ptr addrspace(4) @llvm.amdgcn.kernarg.segment.ptr()
; MESA-NEXT: [[ARG_KERNARG_OFFSET_ALIGN_DOWN:%.*]] = getelementptr inbounds i8, ptr addrspace(4) [[KERN_I8_NOUNDEF_KERNARG_SEGMENT]], i64 36
-; MESA-NEXT: [[TMP1:%.*]] = load i32, ptr addrspace(4) [[ARG_KERNARG_OFFSET_ALIGN_DOWN]], align 4, !invariant.load [[META0]]{{$}}
+; MESA-NEXT: [[TMP1:%.*]] = load i32, ptr addrspace(4) [[ARG_KERNARG_OFFSET_ALIGN_DOWN]], align 4, !invariant.load [[META0]]
; MESA-NEXT: [[TMP2:%.*]] = trunc i32 [[TMP1]] to i8
; MESA-NEXT: store i8 [[TMP2]], ptr addrspace(1) poison, align 1
; MESA-NEXT: ret void
@@ -1928,10 +1928,10 @@ attributes #1 = { nounwind "amdgpu-implicitarg-num-bytes"="40" }
; HSA: [[META5]] = !{i64 1024}
; HSA: [[META6]] = !{[[META7:![0-9]+]]}
; HSA: [[META7]] = distinct !{[[META7]], [[META8:![0-9]+]], !"ptr"}
-; HSA: [[META8]] = distinct !{[[META8]], !"kern_noalias_global_ptr"}
+; HSA: [[META8]] = distinct !{[[META8]], i1 false, !"kern_noalias_global_ptr"}
; HSA: [[META9]] = !{[[META10:![0-9]+]], [[META12:![0-9]+]]}
; HSA: [[META10]] = distinct !{[[META10]], [[META11:![0-9]+]], !"ptr0"}
-; HSA: [[META11]] = distinct !{[[META11]], !"kern_noalias_global_ptr_x2"}
+; HSA: [[META11]] = distinct !{[[META11]], i1 false, !"kern_noalias_global_ptr_x2"}
; HSA: [[META12]] = distinct !{[[META12]], [[META11]], !"ptr1"}
;.
; MESA: [[META0]] = !{}
@@ -1942,9 +1942,9 @@ attributes #1 = { nounwind "amdgpu-implicitarg-num-bytes"="40" }
; MESA: [[META5]] = !{i64 1024}
; MESA: [[META6]] = !{[[META7:![0-9]+]]}
; MESA: [[META7]] = distinct !{[[META7]], [[META8:![0-9]+]], !"ptr"}
-; MESA: [[META8]] = distinct !{[[META8]], !"kern_noalias_global_ptr"}
+; MESA: [[META8]] = distinct !{[[META8]], i1 false, !"kern_noalias_global_ptr"}
; MESA: [[META9]] = !{[[META10:![0-9]+]], [[META12:![0-9]+]]}
; MESA: [[META10]] = distinct !{[[META10]], [[META11:![0-9]+]], !"ptr0"}
-; MESA: [[META11]] = distinct !{[[META11]], !"kern_noalias_global_ptr_x2"}
+; MESA: [[META11]] = distinct !{[[META11]], i1 false, !"kern_noalias_global_ptr_x2"}
; MESA: [[META12]] = distinct !{[[META12]], [[META11]], !"ptr1"}
;.
diff --git a/llvm/test/CodeGen/AMDGPU/lower-kernel-arguments-noalias-call-no-ptr-args.ll b/llvm/test/CodeGen/AMDGPU/lower-kernel-arguments-noalias-call-no-ptr-args.ll
index b68e65bd75b8d3..63e664bbab67af 100644
--- a/llvm/test/CodeGen/AMDGPU/lower-kernel-arguments-noalias-call-no-ptr-args.ll
+++ b/llvm/test/CodeGen/AMDGPU/lower-kernel-arguments-noalias-call-no-ptr-args.ll
@@ -112,22 +112,22 @@ attributes #4 = { nounwind memory(argmem: readwrite) }
; CHECK: [[META0]] = !{}
; CHECK: [[META1]] = !{[[META2:![0-9]+]], [[META4:![0-9]+]]}
; CHECK: [[META2]] = distinct !{[[META2]], [[META3:![0-9]+]], !"out"}
-; CHECK: [[META3]] = distinct !{[[META3]], !"call_without_ptr_args"}
+; CHECK: [[META3]] = distinct !{[[META3]], i1 false, !"call_without_ptr_args"}
; CHECK: [[META4]] = distinct !{[[META4]], [[META3]], !"in"}
; CHECK: [[META5]] = !{[[META4]]}
; CHECK: [[META6]] = !{[[META2]]}
; CHECK: [[META7]] = !{[[META8:![0-9]+]]}
; CHECK: [[META8]] = distinct !{[[META8]], [[META9:![0-9]+]], !"out"}
-; CHECK: [[META9]] = distinct !{[[META9]], !"readnone_call_without_ptr_args"}
+; CHECK: [[META9]] = distinct !{[[META9]], i1 false, !"readnone_call_without_ptr_args"}
; CHECK: [[META10]] = !{[[META11:![0-9]+]], [[META13:![0-9]+]]}
; CHECK: [[META11]] = distinct !{[[META11]], [[META12:![0-9]+]], !"out"}
-; CHECK: [[META12]] = distinct !{[[META12]], !"argmemonly_call_without_ptr_args"}
+; CHECK: [[META12]] = distinct !{[[META12]], i1 false, !"argmemonly_call_without_ptr_args"}
; CHECK: [[META13]] = distinct !{[[META13]], [[META12]], !"in"}
; CHECK: [[META14]] = !{[[META13]]}
; CHECK: [[META15]] = !{[[META11]]}
; CHECK: [[META16]] = !{[[META17:![0-9]+]]}
; CHECK: [[META17]] = distinct !{[[META17]], [[META18:![0-9]+]], !"in"}
-; CHECK: [[META18]] = distinct !{[[META18]], !"argmemonly_call_with_ptr_arg"}
+; CHECK: [[META18]] = distinct !{[[META18]], i1 false, !"argmemonly_call_with_ptr_arg"}
; CHECK: [[META19]] = !{[[META20:![0-9]+]]}
; CHECK: [[META20]] = distinct !{[[META20]], [[META18]], !"out"}
;.
diff --git a/llvm/test/CodeGen/AMDGPU/lower-lds-struct-aa-memcpy.ll b/llvm/test/CodeGen/AMDGPU/lower-lds-struct-aa-memcpy.ll
index 9c0db2953580c5..3db67d59632f09 100644
--- a/llvm/test/CodeGen/AMDGPU/lower-lds-struct-aa-memcpy.ll
+++ b/llvm/test/CodeGen/AMDGPU/lower-lds-struct-aa-memcpy.ll
@@ -71,7 +71,7 @@ declare void @llvm.memcpy.p3.p3.i64(ptr addrspace(3) noalias nocapture writeonly
; CHECK: [[META0:![0-9]+]] = !{i32 0, i32 1}
; CHECK: [[META1:![0-9]+]] = !{!2}
; CHECK: [[META2:![0-9]+]] = distinct !{!2, !3}
-; CHECK: [[META3:![0-9]+]] = distinct !{!3}
+; CHECK: [[META3:![0-9]+]] = distinct !{!3, i1 false}
; CHECK: [[META4:![0-9]+]] = !{!5}
; CHECK: [[META5:![0-9]+]] = distinct !{!5, !3}
; CHECK: [[META6:![0-9]+]] = !{!5, !2}
diff --git a/llvm/test/CodeGen/AMDGPU/lower-lds-struct-aa-merge.ll b/llvm/test/CodeGen/AMDGPU/lower-lds-struct-aa-merge.ll
index f7ef3dfc64f65b..0ba0ca8f985118 100644
--- a/llvm/test/CodeGen/AMDGPU/lower-lds-struct-aa-merge.ll
+++ b/llvm/test/CodeGen/AMDGPU/lower-lds-struct-aa-merge.ll
@@ -9,12 +9,12 @@ define amdgpu_kernel void @no_clobber_ds_load_stores_x2_preexisting_aa(ptr addrs
; CHECK-LABEL: define amdgpu_kernel void @no_clobber_ds_load_stores_x2_preexisting_aa(
; CHECK-SAME: ptr addrspace(1) [[ARG:%.*]], i32 [[I:%.*]]) #[[ATTR0:[0-9]+]] {
; CHECK-NEXT: bb:
-; CHECK-NEXT: store i32 1, ptr addrspace(3) @llvm.amdgcn.kernel.no_clobber_ds_load_stores_x2_preexisting_aa.lds, align 16, !tbaa [[TBAA1:![0-9]+]], !noalias !6
+; CHECK-NEXT: store i32 1, ptr addrspace(3) @llvm.amdgcn.kernel.no_clobber_ds_load_stores_x2_preexisting_aa.lds, align 16, !tbaa [[TBAA1:![0-9]+]], !noalias [[META6:![0-9]+]]
; CHECK-NEXT: [[GEP_A:%.*]] = getelementptr inbounds [64 x i32], ptr addrspace(3) @llvm.amdgcn.kernel.no_clobber_ds_load_stores_x2_preexisting_aa.lds, i32 0, i32 [[I]]
-; CHECK-NEXT: [[VAL_A:%.*]] = load i32, ptr addrspace(3) [[GEP_A]], align 4, !tbaa [[TBAA1]], !noalias !6
-; CHECK-NEXT: store i32 2, ptr addrspace(3) getelementptr inbounds ([[LLVM_AMDGCN_KERNEL_NO_CLOBBER_DS_LOAD_STORES_X2_PREEXISTING_AA_LDS_T:%.*]], ptr addrspace(3) @llvm.amdgcn.kernel.no_clobber_ds_load_stores_x2_preexisting_aa.lds, i32 0, i32 1), align 16, !tbaa [[TBAA1]], !noalias !11
+; CHECK-NEXT: [[VAL_A:%.*]] = load i32, ptr addrspace(3) [[GEP_A]], align 4, !tbaa [[TBAA1]], !noalias [[META6]]
+; CHECK-NEXT: store i32 2, ptr addrspace(3) getelementptr inbounds ([[LLVM_AMDGCN_KERNEL_NO_CLOBBER_DS_LOAD_STORES_X2_PREEXISTING_AA_LDS_T:%.*]], ptr addrspace(3) @llvm.amdgcn.kernel.no_clobber_ds_load_stores_x2_preexisting_aa.lds, i32 0, i32 1), align 16, !tbaa [[TBAA1]], !noalias [[META11:![0-9]+]]
; CHECK-NEXT: [[GEP_B:%.*]] = getelementptr inbounds [64 x i32], ptr addrspace(3) getelementptr inbounds ([[LLVM_AMDGCN_KERNEL_NO_CLOBBER_DS_LOAD_STORES_X2_PREEXISTING_AA_LDS_T]], ptr addrspace(3) @llvm.amdgcn.kernel.no_clobber_ds_load_stores_x2_preexisting_aa.lds, i32 0, i32 1), i32 0, i32 [[I]]
-; CHECK-NEXT: [[VAL_B:%.*]] = load i32, ptr addrspace(3) [[GEP_B]], align 4, !tbaa [[TBAA1]], !noalias !11
+; CHECK-NEXT: [[VAL_B:%.*]] = load i32, ptr addrspace(3) [[GEP_B]], align 4, !tbaa [[TBAA1]], !noalias [[META11]]
; CHECK-NEXT: [[VAL:%.*]] = add i32 [[VAL_A]], [[VAL_B]]
; CHECK-NEXT: store i32 [[VAL]], ptr addrspace(1) [[ARG]], align 4
; CHECK-NEXT: ret void
@@ -33,7 +33,7 @@ bb:
!0 = !{!1}
!1 = distinct !{!1, !2}
-!2 = distinct !{!2}
+!2 = distinct !{!2, i1 false}
!3 = !{!4}
!4 = distinct !{!4, !2}
!5 = !{!6, !7, i64 0}
@@ -50,9 +50,9 @@ bb:
; CHECK:!5 = !{!"Simple C++ TBAA"}
; CHECK:!6 = !{!7, !9}
; CHECK:!7 = distinct !{!7, !8}
-; CHECK:!8 = distinct !{!8}
+; CHECK:!8 = distinct !{!8, i1 false}
; CHECK:!9 = distinct !{!9, !10}
-; CHECK:!10 = distinct !{!10}
+; CHECK:!10 = distinct !{!10, i1 false}
; CHECK:!11 = !{!12, !13}
; CHECK:!12 = distinct !{!12, !8}
; CHECK:!13 = distinct !{!13, !10}
diff --git a/llvm/test/CodeGen/AMDGPU/lower-lds-struct-aa.ll b/llvm/test/CodeGen/AMDGPU/lower-lds-struct-aa.ll
index cd7faa9e917fec..3c886db948a811 100644
--- a/llvm/test/CodeGen/AMDGPU/lower-lds-struct-aa.ll
+++ b/llvm/test/CodeGen/AMDGPU/lower-lds-struct-aa.ll
@@ -113,12 +113,12 @@ bb:
; CHECK: !0 = !{i32 0, i32 1}
; CHECK: !1 = !{!2}
; CHECK: !2 = distinct !{!2, !3}
-; CHECK: !3 = distinct !{!3}
+; CHECK: !3 = distinct !{!3, i1 false}
; CHECK: !4 = !{!5}
; CHECK: !5 = distinct !{!5, !3}
; CHECK: !6 = !{!7}
; CHECK: !7 = distinct !{!7, !8}
-; CHECK: !8 = distinct !{!8}
+; CHECK: !8 = distinct !{!8, i1 false}
; CHECK: !9 = !{!10, !11}
; CHECK: !10 = distinct !{!10, !8}
; CHECK: !11 = distinct !{!11, !8}
diff --git a/llvm/test/CodeGen/AMDGPU/lower-lds-with-alias-scope.ll b/llvm/test/CodeGen/AMDGPU/lower-lds-with-alias-scope.ll
index e14ee60611236c..3754fc33733a80 100644
--- a/llvm/test/CodeGen/AMDGPU/lower-lds-with-alias-scope.ll
+++ b/llvm/test/CodeGen/AMDGPU/lower-lds-with-alias-scope.ll
@@ -48,7 +48,7 @@ bb:
!1 = !{!1}
!2 = !{!3}
!3 = distinct !{!3, !4}
- !4 = distinct !{!4}
+ !4 = distinct !{!4, i1 false}
!5 = !{!3}
!6 = !{!7}
!7 = !{!7, !4}
diff --git a/llvm/test/CodeGen/AMDGPU/lower-lds-with-noalias.ll b/llvm/test/CodeGen/AMDGPU/lower-lds-with-noalias.ll
index 8815be9549af29..e3665bf93e5d7f 100644
--- a/llvm/test/CodeGen/AMDGPU/lower-lds-with-noalias.ll
+++ b/llvm/test/CodeGen/AMDGPU/lower-lds-with-noalias.ll
@@ -65,7 +65,7 @@ bb:
!1 = !{!1}
!2 = !{!3}
!3 = distinct !{!3, !4}
- !4 = distinct !{!4}
+ !4 = distinct !{!4, i1 false}
!5 = !{!3}
;.
; CHECK: [[TBAA1]] = !{[[META2:![0-9]+]], [[META2]], i64 0, i64 0}
@@ -73,10 +73,10 @@ bb:
; CHECK: [[META3]] = distinct !{[[META3]]}
; CHECK: [[META4]] = !{[[META5:![0-9]+]]}
; CHECK: [[META5]] = distinct !{[[META5]], [[META6:![0-9]+]]}
-; CHECK: [[META6]] = distinct !{[[META6]]}
+; CHECK: [[META6]] = distinct !{[[META6]], i1 false}
; CHECK: [[META7]] = !{[[META8:![0-9]+]], [[META10:![0-9]+]], [[META11:![0-9]+]]}
; CHECK: [[META8]] = distinct !{[[META8]], [[META9:![0-9]+]]}
-; CHECK: [[META9]] = distinct !{[[META9]]}
+; CHECK: [[META9]] = distinct !{[[META9]], i1 false}
; CHECK: [[META10]] = distinct !{[[META10]], [[META6]]}
; CHECK: [[META11]] = distinct !{[[META11]], [[META6]]}
; CHECK: [[META12]] = !{[[META10]]}
diff --git a/llvm/test/CodeGen/AMDGPU/lower-module-lds-via-hybrid.ll b/llvm/test/CodeGen/AMDGPU/lower-module-lds-via-hybrid.ll
index 754c5286573bab..89ea8441459b03 100644
--- a/llvm/test/CodeGen/AMDGPU/lower-module-lds-via-hybrid.ll
+++ b/llvm/test/CodeGen/AMDGPU/lower-module-lds-via-hybrid.ll
@@ -313,13 +313,13 @@ define amdgpu_kernel void @k123() {
; OPT: !4 = !{i32 1}
; OPT: !5 = !{!6}
; OPT: !6 = distinct !{!6, !7}
-; OPT: !7 = distinct !{!7}
+; OPT: !7 = distinct !{!7, i1 false}
; OPT: !8 = !{!9}
; OPT: !9 = distinct !{!9, !7}
; OPT: !10 = !{i32 0}
; OPT: !11 = !{!12}
; OPT: !12 = distinct !{!12, !13}
-; OPT: !13 = distinct !{!13}
+; OPT: !13 = distinct !{!13, i1 false}
; OPT: !14 = !{!15}
; OPT: !15 = distinct !{!15, !13}
diff --git a/llvm/test/CodeGen/AMDGPU/lower-noalias-kernargs.ll b/llvm/test/CodeGen/AMDGPU/lower-noalias-kernargs.ll
index 722eb1c073fb83..8cf56c65bead6d 100644
--- a/llvm/test/CodeGen/AMDGPU/lower-noalias-kernargs.ll
+++ b/llvm/test/CodeGen/AMDGPU/lower-noalias-kernargs.ll
@@ -365,7 +365,7 @@ attributes #0 = { nounwind "amdgpu-flat-work-group-size"="1,32" }
attributes #1 = { nounwind }
attributes #2 = { nounwind readnone speculatable }
-!0 = distinct !{!0, !"alias_scope_0"}
+!0 = distinct !{!0, i1 false, !"alias_scope_0"}
!1 = distinct !{!1, !0, !"alias_scope_1"}
!2 = !{!1}
!3 = distinct !{!3, !0, !"alias_scope_3"}
@@ -374,22 +374,22 @@ attributes #2 = { nounwind readnone speculatable }
; CHECK: [[META0]] = !{}
; CHECK: [[META1]] = !{[[META2:![0-9]+]]}
; CHECK: [[META2]] = distinct !{[[META2]], [[META3:![0-9]+]], !"in"}
-; CHECK: [[META3]] = distinct !{[[META3]], !"aliasinfo_2i32_NA"}
+; CHECK: [[META3]] = distinct !{[[META3]], i1 false, !"aliasinfo_2i32_NA"}
; CHECK: [[META4]] = !{[[META5:![0-9]+]]}
; CHECK: [[META5]] = distinct !{[[META5]], [[META3]], !"out"}
; CHECK: [[META6]] = !{[[META7:![0-9]+]]}
; CHECK: [[META7]] = distinct !{[[META7]], [[META8:![0-9]+]], !"alias_scope_3"}
-; CHECK: [[META8]] = distinct !{[[META8]], !"alias_scope_0"}
+; CHECK: [[META8]] = distinct !{[[META8]], i1 false, !"alias_scope_0"}
; CHECK: [[META9]] = !{[[META10:![0-9]+]]}
; CHECK: [[META10]] = distinct !{[[META10]], [[META8]], !"alias_scope_1"}
; CHECK: [[META11]] = !{[[META7]], [[META12:![0-9]+]]}
; CHECK: [[META12]] = distinct !{[[META12]], [[META13:![0-9]+]], !"in"}
-; CHECK: [[META13]] = distinct !{[[META13]], !"aliasinfo_2i32_NA_AS"}
+; CHECK: [[META13]] = distinct !{[[META13]], i1 false, !"aliasinfo_2i32_NA_AS"}
; CHECK: [[META14]] = !{[[META10]], [[META15:![0-9]+]]}
; CHECK: [[META15]] = distinct !{[[META15]], [[META13]], !"out"}
; CHECK: [[META16]] = !{[[META17:![0-9]+]]}
; CHECK: [[META17]] = distinct !{[[META17]], [[META18:![0-9]+]], !"in"}
-; CHECK: [[META18]] = distinct !{[[META18]], !"aliasinfo_v4f32_3v4i8_NA"}
+; CHECK: [[META18]] = distinct !{[[META18]], i1 false, !"aliasinfo_v4f32_3v4i8_NA"}
; CHECK: [[META19]] = !{[[META20:![0-9]+]], [[META21:![0-9]+]], [[META22:![0-9]+]]}
; CHECK: [[META20]] = distinct !{[[META20]], [[META18]], !"out"}
; CHECK: [[META21]] = distinct !{[[META21]], [[META18]], !"out1"}
@@ -402,7 +402,7 @@ attributes #2 = { nounwind readnone speculatable }
; CHECK: [[META28]] = !{[[META20]], [[META17]], [[META22]]}
; CHECK: [[META29]] = !{[[META7]], [[META30:![0-9]+]]}
; CHECK: [[META30]] = distinct !{[[META30]], [[META31:![0-9]+]], !"in"}
-; CHECK: [[META31]] = distinct !{[[META31]], !"aliasinfo_v4f32_3v4i8_NA_AS"}
+; CHECK: [[META31]] = distinct !{[[META31]], i1 false, !"aliasinfo_v4f32_3v4i8_NA_AS"}
; CHECK: [[META32]] = !{[[META10]], [[META33:![0-9]+]], [[META34:![0-9]+]], [[META35:![0-9]+]]}
; CHECK: [[META33]] = distinct !{[[META33]], [[META31]], !"out"}
; CHECK: [[META34]] = distinct !{[[META34]], [[META31]], !"out1"}
@@ -415,7 +415,7 @@ attributes #2 = { nounwind readnone speculatable }
; CHECK: [[META41]] = !{[[META7]], [[META33]], [[META30]], [[META35]]}
; CHECK: [[META42]] = !{[[META43:![0-9]+]]}
; CHECK: [[META43]] = distinct !{[[META43]], [[META44:![0-9]+]], !"in"}
-; CHECK: [[META44]] = distinct !{[[META44]], !"aliasinfo_mixed_intrinsics_NA"}
+; CHECK: [[META44]] = distinct !{[[META44]], i1 false, !"aliasinfo_mixed_intrinsics_NA"}
; CHECK: [[META45]] = !{[[META46:![0-9]+]], [[META47:![0-9]+]]}
; CHECK: [[META46]] = distinct !{[[META46]], [[META44]], !"inout"}
; CHECK: [[META47]] = distinct !{[[META47]], [[META44]], !"out"}
@@ -423,7 +423,7 @@ attributes #2 = { nounwind readnone speculatable }
; CHECK: [[META49]] = !{[[META43]], [[META47]]}
; CHECK: [[META50]] = !{[[META7]], [[META51:![0-9]+]]}
; CHECK: [[META51]] = distinct !{[[META51]], [[META52:![0-9]+]], !"in"}
-; CHECK: [[META52]] = distinct !{[[META52]], !"aliasinfo_mixed_intrinsics_NA_AS"}
+; CHECK: [[META52]] = distinct !{[[META52]], i1 false, !"aliasinfo_mixed_intrinsics_NA_AS"}
; CHECK: [[META53]] = !{[[META10]], [[META54:![0-9]+]], [[META55:![0-9]+]]}
; CHECK: [[META54]] = distinct !{[[META54]], [[META52]], !"inout"}
; CHECK: [[META55]] = distinct !{[[META55]], [[META52]], !"out"}
diff --git a/llvm/test/CodeGen/AMDGPU/memcpy-scoped-aa.ll b/llvm/test/CodeGen/AMDGPU/memcpy-scoped-aa.ll
index b401cb5961855f..0990f92266567b 100644
--- a/llvm/test/CodeGen/AMDGPU/memcpy-scoped-aa.ll
+++ b/llvm/test/CodeGen/AMDGPU/memcpy-scoped-aa.ll
@@ -5,7 +5,7 @@
; Re-evaluate the slot numbers of scopes as that numbering could be changed run-by-run.
-; MIR-DAG: ![[DOMAIN:[0-9]+]] = distinct !{!{{[0-9]+}}, !"bax"}
+; MIR-DAG: ![[DOMAIN:[0-9]+]] = distinct !{!{{[0-9]+}}, i1 false, !"bax"}
; MIR-DAG: ![[SCOPE0:[0-9]+]] = distinct !{!{{[0-9]+}}, ![[DOMAIN]], !"bax: %p"}
; MIR-DAG: ![[SCOPE1:[0-9]+]] = distinct !{!{{[0-9]+}}, ![[DOMAIN]], !"bax: %q"}
; MIR-DAG: ![[SET0:[0-9]+]] = !{![[SCOPE0]]}
@@ -94,7 +94,7 @@ declare void @llvm.memcpy.inline.p1.p1.i64(ptr addrspace(1) noalias nocapture wr
declare void @llvm.memmove.p1.p1.i64(ptr addrspace(1) nocapture writeonly, ptr addrspace(1) nocapture readonly, i64, i1 immarg)
declare void @llvm.memset.p1.i64(ptr addrspace(1) nocapture writeonly, i8, i64, i1 immarg)
-!0 = distinct !{!0, !"bax"}
+!0 = distinct !{!0, i1 false, !"bax"}
!1 = distinct !{!1, !0, !"bax: %p"}
!2 = !{!1}
!3 = distinct !{!3, !0, !"bax: %q"}
diff --git a/llvm/test/CodeGen/AMDGPU/remove-no-kernel-id-attribute.ll b/llvm/test/CodeGen/AMDGPU/remove-no-kernel-id-attribute.ll
index a7c9a55eafa08d..ae4fa6f13fe6bd 100644
--- a/llvm/test/CodeGen/AMDGPU/remove-no-kernel-id-attribute.ll
+++ b/llvm/test/CodeGen/AMDGPU/remove-no-kernel-id-attribute.ll
@@ -201,13 +201,13 @@ define amdgpu_kernel void @kernel_lds_recursion() {
; CHECK: [[META3]] = !{i32 1}
; CHECK: [[META4]] = !{[[META5:![0-9]+]]}
; CHECK: [[META5]] = distinct !{[[META5]], [[META6:![0-9]+]]}
-; CHECK: [[META6]] = distinct !{[[META6]]}
+; CHECK: [[META6]] = distinct !{[[META6]], i1 false}
; CHECK: [[META7]] = !{[[META8:![0-9]+]]}
; CHECK: [[META8]] = distinct !{[[META8]], [[META6]]}
; CHECK: [[META9]] = !{i32 2}
; CHECK: [[META10]] = !{[[META11:![0-9]+]]}
; CHECK: [[META11]] = distinct !{[[META11]], [[META12:![0-9]+]]}
-; CHECK: [[META12]] = distinct !{[[META12]]}
+; CHECK: [[META12]] = distinct !{[[META12]], i1 false}
; CHECK: [[META13]] = !{[[META14:![0-9]+]]}
; CHECK: [[META14]] = distinct !{[[META14]], [[META12]]}
;.
diff --git a/llvm/test/CodeGen/AMDGPU/si-split-load-store-alias-info.ll b/llvm/test/CodeGen/AMDGPU/si-split-load-store-alias-info.ll
index 81bf7ffb210dec..40cddfb0b2dc5e 100644
--- a/llvm/test/CodeGen/AMDGPU/si-split-load-store-alias-info.ll
+++ b/llvm/test/CodeGen/AMDGPU/si-split-load-store-alias-info.ll
@@ -27,7 +27,7 @@ define amdgpu_kernel void @test(ptr addrspace(3) noalias %in, ptr addrspace(3) n
declare i32 @llvm.amdgcn.workitem.id.x()
-!0 = !{!"inout.domain"}
+!0 = !{!"inout.domain", i1 false}
!1 = !{!"in.scope", !0}
!2 = !{!"out.scope", !0}
!4 = !{!1}
diff --git a/llvm/test/CodeGen/AMDGPU/target-mem-intrinsic-metadata.ll b/llvm/test/CodeGen/AMDGPU/target-mem-intrinsic-metadata.ll
index dc9c8373f9c176..1aaaf2cd3e7ed7 100644
--- a/llvm/test/CodeGen/AMDGPU/target-mem-intrinsic-metadata.ll
+++ b/llvm/test/CodeGen/AMDGPU/target-mem-intrinsic-metadata.ll
@@ -19,4 +19,4 @@ attributes #0 = { argmemonly convergent nounwind willreturn }
!0 = !{!1}
!1 = distinct !{!1, !2}
-!2 = distinct !{!2}
+!2 = distinct !{!2, i1 false}
diff --git a/llvm/test/CodeGen/AMDGPU/waitcnt-unscoped.ll b/llvm/test/CodeGen/AMDGPU/waitcnt-unscoped.ll
index 591a2bd5990879..55f0278bbf4343 100644
--- a/llvm/test/CodeGen/AMDGPU/waitcnt-unscoped.ll
+++ b/llvm/test/CodeGen/AMDGPU/waitcnt-unscoped.ll
@@ -63,20 +63,20 @@ entry:
}
; VMEM alias domain and scope
-!5 = !{!"vmem.domain"}
+!5 = !{!"vmem.domain", i1 false}
!4 = !{!"vmem.scope", !5}
!0 = !{!4}
; LDS alias domains and scopes
-!3 = !{!"lds1.domain"}
+!3 = !{!"lds1.domain", i1 false}
!2 = !{!"lds1.scope", !3}
!1 = !{!2}
-!8 = !{!"lds2.domain"}
+!8 = !{!"lds2.domain", i1 false}
!7 = !{!"lds2.scope", !8}
!6 = !{!7}
-!11 = !{!"lds1_off4.domain"}
+!11 = !{!"lds1_off4.domain", i1 false}
!10 = !{!"lds1_off4.scope", !11}
!9 = !{!10}
diff --git a/llvm/test/CodeGen/AVR/rust-avr-bug-95.ll b/llvm/test/CodeGen/AVR/rust-avr-bug-95.ll
index fc28a73a5541cf..812a79e6000ad9 100644
--- a/llvm/test/CodeGen/AVR/rust-avr-bug-95.ll
+++ b/llvm/test/CodeGen/AVR/rust-avr-bug-95.ll
@@ -26,12 +26,12 @@ attributes #0 = { uwtable }
!0 = !{!1, !3, !5, !6, !8}
!1 = distinct !{!1, !2, !"_ZN3lib3fmt9Formatter9write_str17ha1a9656fc66ccbe5E: %data.0"}
-!2 = distinct !{!2, !"_ZN3lib3fmt9Formatter9write_str17ha1a9656fc66ccbe5E"}
+!2 = distinct !{!2, i1 false, !"_ZN3lib3fmt9Formatter9write_str17ha1a9656fc66ccbe5E"}
!3 = distinct !{!3, !4, !"_ZN3lib3fmt8builders16debug_struct_new17h352a1de8f89c2bc3E: argument 0"}
-!4 = distinct !{!4, !"_ZN3lib3fmt8builders16debug_struct_new17h352a1de8f89c2bc3E"}
+!4 = distinct !{!4, i1 false, !"_ZN3lib3fmt8builders16debug_struct_new17h352a1de8f89c2bc3E"}
!5 = distinct !{!5, !4, !"_ZN3lib3fmt8builders16debug_struct_new17h352a1de8f89c2bc3E: %name.0"}
!6 = distinct !{!6, !7, !"_ZN3lib3fmt9Formatter12debug_struct17ha1ff79f633171b68E: argument 0"}
-!7 = distinct !{!7, !"_ZN3lib3fmt9Formatter12debug_struct17ha1ff79f633171b68E"}
+!7 = distinct !{!7, i1 false, !"_ZN3lib3fmt9Formatter12debug_struct17ha1ff79f633171b68E"}
!8 = distinct !{!8, !7, !"_ZN3lib3fmt9Formatter12debug_struct17ha1ff79f633171b68E: %name.0"}
!9 = !{}
!10 = !{!3, !6}
diff --git a/llvm/test/CodeGen/Hexagon/autohvx/isel-expand-unaligned-loads-noindexed.ll b/llvm/test/CodeGen/Hexagon/autohvx/isel-expand-unaligned-loads-noindexed.ll
index a27e50fb2931c4..f01ed6cfbb20b6 100644
--- a/llvm/test/CodeGen/Hexagon/autohvx/isel-expand-unaligned-loads-noindexed.ll
+++ b/llvm/test/CodeGen/Hexagon/autohvx/isel-expand-unaligned-loads-noindexed.ll
@@ -57,7 +57,7 @@ attributes #0 = { nounwind "target-cpu"="hexagonv60" "target-features"="+hvx-len
!2 = !{!"Simple C/C++ TBAA"}
!3 = !{!4}
!4 = distinct !{!4, !5}
-!5 = distinct !{!5, !"LVerDomain"}
+!5 = distinct !{!5, i1 false, !"LVerDomain"}
!6 = !{!7}
!7 = distinct !{!7, !5}
!8 = !{!4, !9, !10, !11}
diff --git a/llvm/test/CodeGen/Hexagon/swp-conv3x3-nested.ll b/llvm/test/CodeGen/Hexagon/swp-conv3x3-nested.ll
index 69b89a680ff5a3..ed837a54404f1e 100644
--- a/llvm/test/CodeGen/Hexagon/swp-conv3x3-nested.ll
+++ b/llvm/test/CodeGen/Hexagon/swp-conv3x3-nested.ll
@@ -162,7 +162,7 @@ attributes #2 = { nounwind }
!4 = !{!"Simple C/C++ TBAA"}
!5 = !{!6}
!6 = distinct !{!6, !7, !"x: %a"}
-!7 = distinct !{!7, !"x"}
+!7 = distinct !{!7, i1 false, !"x"}
!8 = !{!9, !10}
!9 = distinct !{!9, !7, !"x: %b"}
!10 = distinct !{!10, !7, !"x: %c"}
diff --git a/llvm/test/CodeGen/MIR/AArch64/machine-metadata.mir b/llvm/test/CodeGen/MIR/AArch64/machine-metadata.mir
index a0764ae25b492a..7708e6db0d360c 100644
--- a/llvm/test/CodeGen/MIR/AArch64/machine-metadata.mir
+++ b/llvm/test/CodeGen/MIR/AArch64/machine-metadata.mir
@@ -54,7 +54,7 @@
!0 = !{!1}
!1 = distinct !{!1, !2, !"bax: %p"}
- !2 = distinct !{!2, !"bax"}
+ !2 = distinct !{!2, i1 false, !"bax"}
!3 = !{!4}
!4 = distinct !{!4, !2, !"bax: %q"}
@@ -74,15 +74,17 @@ body: |
liveins: $x0, $x1
; CHECK-LABEL: name: test_memcpy
- ; CHECK: [[COPY:%[0-9]+]]:gpr64common = COPY $x1
- ; CHECK: [[COPY1:%[0-9]+]]:gpr64common = COPY $x0
- ; CHECK: [[LDRQui:%[0-9]+]]:fpr128 = LDRQui [[COPY1]], 1 :: (load (s128) from %ir.p1, align 4, !alias.scope !5, !noalias !8)
- ; CHECK: STRQui killed [[LDRQui]], [[COPY1]], 0 :: (store (s128) into %ir.p0, align 4, !alias.scope !10, !noalias !11)
- ; CHECK: [[LDRWui:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 0 :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)
- ; CHECK: [[LDRWui1:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 1 :: (load (s32) from %ir.q1, !alias.scope !3, !noalias !0)
- ; CHECK: [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr killed [[LDRWui]], killed [[LDRWui1]]
- ; CHECK: $w0 = COPY [[ADDWrr]]
- ; CHECK: RET_ReallyLR implicit $w0
+ ; CHECK: liveins: $x0, $x1
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64common = COPY $x1
+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64common = COPY $x0
+ ; CHECK-NEXT: [[LDRQui:%[0-9]+]]:fpr128 = LDRQui [[COPY1]], 1 :: (load (s128) from %ir.p1, align 4, !alias.scope !5, !noalias !8)
+ ; CHECK-NEXT: STRQui killed [[LDRQui]], [[COPY1]], 0 :: (store (s128) into %ir.p0, align 4, !alias.scope !10, !noalias !11)
+ ; CHECK-NEXT: [[LDRWui:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 0 :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)
+ ; CHECK-NEXT: [[LDRWui1:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 1 :: (load (s32) from %ir.q1, !alias.scope !3, !noalias !0)
+ ; CHECK-NEXT: [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr killed [[LDRWui]], killed [[LDRWui1]]
+ ; CHECK-NEXT: $w0 = COPY [[ADDWrr]]
+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
%1:gpr64common = COPY $x1
%0:gpr64common = COPY $x0
%2:fpr128 = LDRQui %0, 1 :: (load (s128) from %ir.p1, align 4, !alias.scope !5, !noalias !8)
@@ -109,15 +111,17 @@ body: |
liveins: $x0, $x1
; CHECK-LABEL: name: test_memcpy_inline
- ; CHECK: [[COPY:%[0-9]+]]:gpr64common = COPY $x1
- ; CHECK: [[COPY1:%[0-9]+]]:gpr64common = COPY $x0
- ; CHECK: [[LDRQui:%[0-9]+]]:fpr128 = LDRQui [[COPY1]], 1 :: (load (s128) from %ir.p1, align 4, !alias.scope !5, !noalias !8)
- ; CHECK: STRQui killed [[LDRQui]], [[COPY1]], 0 :: (store (s128) into %ir.p0, align 4, !alias.scope !10, !noalias !11)
- ; CHECK: [[LDRWui:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 0 :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)
- ; CHECK: [[LDRWui1:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 1 :: (load (s32) from %ir.q1, !alias.scope !3, !noalias !0)
- ; CHECK: [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr killed [[LDRWui]], killed [[LDRWui1]]
- ; CHECK: $w0 = COPY [[ADDWrr]]
- ; CHECK: RET_ReallyLR implicit $w0
+ ; CHECK: liveins: $x0, $x1
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64common = COPY $x1
+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64common = COPY $x0
+ ; CHECK-NEXT: [[LDRQui:%[0-9]+]]:fpr128 = LDRQui [[COPY1]], 1 :: (load (s128) from %ir.p1, align 4, !alias.scope !5, !noalias !8)
+ ; CHECK-NEXT: STRQui killed [[LDRQui]], [[COPY1]], 0 :: (store (s128) into %ir.p0, align 4, !alias.scope !10, !noalias !11)
+ ; CHECK-NEXT: [[LDRWui:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 0 :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)
+ ; CHECK-NEXT: [[LDRWui1:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 1 :: (load (s32) from %ir.q1, !alias.scope !3, !noalias !0)
+ ; CHECK-NEXT: [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr killed [[LDRWui]], killed [[LDRWui1]]
+ ; CHECK-NEXT: $w0 = COPY [[ADDWrr]]
+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
%1:gpr64common = COPY $x1
%0:gpr64common = COPY $x0
%2:fpr128 = LDRQui %0, 1 :: (load (s128) from %ir.p1, align 4, !alias.scope !5, !noalias !8)
@@ -144,15 +148,17 @@ body: |
liveins: $x0, $x1
; CHECK-LABEL: name: test_mempcpy
- ; CHECK: [[COPY:%[0-9]+]]:gpr64common = COPY $x1
- ; CHECK: [[COPY1:%[0-9]+]]:gpr64common = COPY $x0
- ; CHECK: [[LDRQui:%[0-9]+]]:fpr128 = LDRQui [[COPY1]], 1 :: (load (s128) from %ir.p1, align 1, !alias.scope !5, !noalias !8)
- ; CHECK: STRQui killed [[LDRQui]], [[COPY1]], 0 :: (store (s128) into %ir.p0, align 1, !alias.scope !10, !noalias !11)
- ; CHECK: [[LDRWui:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 0 :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)
- ; CHECK: [[LDRWui1:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 1 :: (load (s32) from %ir.q1, !alias.scope !3, !noalias !0)
- ; CHECK: [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr killed [[LDRWui]], killed [[LDRWui1]]
- ; CHECK: $w0 = COPY [[ADDWrr]]
- ; CHECK: RET_ReallyLR implicit $w0
+ ; CHECK: liveins: $x0, $x1
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64common = COPY $x1
+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64common = COPY $x0
+ ; CHECK-NEXT: [[LDRQui:%[0-9]+]]:fpr128 = LDRQui [[COPY1]], 1 :: (load (s128) from %ir.p1, align 1, !alias.scope !5, !noalias !8)
+ ; CHECK-NEXT: STRQui killed [[LDRQui]], [[COPY1]], 0 :: (store (s128) into %ir.p0, align 1, !alias.scope !10, !noalias !11)
+ ; CHECK-NEXT: [[LDRWui:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 0 :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)
+ ; CHECK-NEXT: [[LDRWui1:%[0-9]+]]:gpr32 = LDRWui [[COPY]], 1 :: (load (s32) from %ir.q1, !alias.scope !3, !noalias !0)
+ ; CHECK-NEXT: [[ADDWrr:%[0-9]+]]:gpr32 = ADDWrr killed [[LDRWui]], killed [[LDRWui1]]
+ ; CHECK-NEXT: $w0 = COPY [[ADDWrr]]
+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
%1:gpr64common = COPY $x1
%0:gpr64common = COPY $x0
%2:fpr128 = LDRQui %0, 1 :: (load (s128) from %ir.p1, align 1, !alias.scope !5, !noalias !8)
diff --git a/llvm/test/CodeGen/MIR/AMDGPU/machine-metadata.mir b/llvm/test/CodeGen/MIR/AMDGPU/machine-metadata.mir
index 45cf5a3fb7f7b1..173f8573597f16 100644
--- a/llvm/test/CodeGen/MIR/AMDGPU/machine-metadata.mir
+++ b/llvm/test/CodeGen/MIR/AMDGPU/machine-metadata.mir
@@ -59,7 +59,7 @@
!0 = !{!1}
!1 = distinct !{!1, !2, !"bax: %p"}
- !2 = distinct !{!2, !"bax"}
+ !2 = distinct !{!2, i1 false, !"bax"}
!3 = !{!4}
!4 = distinct !{!4, !2, !"bax: %q"}
@@ -79,23 +79,25 @@ body: |
liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
; CHECK-LABEL: name: test_memcpy
- ; CHECK: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr3
- ; CHECK: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
- ; CHECK: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; CHECK: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; CHECK: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
- ; CHECK: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
- ; CHECK: [[COPY5:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE1]]
- ; CHECK: [[GLOBAL_LOAD_DWORDX4_:%[0-9]+]]:vreg_128 = GLOBAL_LOAD_DWORDX4 [[COPY5]], 16, 0, implicit $exec :: (load (s128) from %ir.p1, align 4, !alias.scope ![[LOAD_SCOPE:[0-9]+]], !noalias ![[LOAD_NOALIAS:[0-9]+]], addrspace 1)
- ; CHECK: [[COPY6:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE1]]
- ; CHECK: GLOBAL_STORE_DWORDX4 [[COPY6]], killed [[GLOBAL_LOAD_DWORDX4_]], 0, 0, implicit $exec :: (store (s128) into %ir.p0, align 4, !alias.scope ![[STORE_SCOPE:[0-9]+]], !noalias ![[STORE_NOALIAS:[0-9]+]], addrspace 1)
- ; CHECK: [[COPY7:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]]
- ; CHECK: [[GLOBAL_LOAD_DWORDX2_:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2 killed [[COPY7]], 0, 0, implicit $exec :: (load (s64) from %ir.1, align 4, !alias.scope ![[IR_SCOPE:[0-9]+]], !noalias ![[IR_NOALIAS:[0-9]+]], addrspace 1)
- ; CHECK: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[GLOBAL_LOAD_DWORDX2_]].sub0
- ; CHECK: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[GLOBAL_LOAD_DWORDX2_]].sub1
- ; CHECK: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 killed [[COPY8]], killed [[COPY9]], 0, implicit $exec
- ; CHECK: $vgpr0 = COPY [[V_ADD_U32_e64_]]
- ; CHECK: SI_RETURN implicit $vgpr0
+ ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr3
+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY]], %subreg.sub1
+ ; CHECK-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE1]]
+ ; CHECK-NEXT: [[GLOBAL_LOAD_DWORDX4_:%[0-9]+]]:vreg_128 = GLOBAL_LOAD_DWORDX4 [[COPY4]], 16, 0, implicit $exec :: (load (s128) from %ir.p1, align 4, !alias.scope !5, !noalias !8, addrspace 1)
+ ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE1]]
+ ; CHECK-NEXT: GLOBAL_STORE_DWORDX4 [[COPY5]], killed [[GLOBAL_LOAD_DWORDX4_]], 0, 0, implicit $exec :: (store (s128) into %ir.p0, align 4, !alias.scope !10, !noalias !11, addrspace 1)
+ ; CHECK-NEXT: [[COPY6:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]]
+ ; CHECK-NEXT: [[GLOBAL_LOAD_DWORDX2_:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2 killed [[COPY6]], 0, 0, implicit $exec :: (load (s64) from %ir.1, align 4, !alias.scope !3, !noalias !0, addrspace 1)
+ ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[GLOBAL_LOAD_DWORDX2_]].sub0
+ ; CHECK-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[GLOBAL_LOAD_DWORDX2_]].sub1
+ ; CHECK-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 killed [[COPY7]], killed [[COPY8]], 0, implicit $exec
+ ; CHECK-NEXT: $vgpr0 = COPY [[V_ADD_U32_e64_]]
+ ; CHECK-NEXT: SI_RETURN implicit $vgpr0
%3:vgpr_32 = COPY $vgpr3
%2:vgpr_32 = COPY $vgpr2
%1:vgpr_32 = COPY $vgpr1
@@ -130,23 +132,25 @@ body: |
liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
; CHECK-LABEL: name: test_memcpy_inline
- ; CHECK: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr3
- ; CHECK: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
- ; CHECK: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; CHECK: [[COPY4:%[0-9]+]]:vgpr_32 = COPY $vgpr0
- ; CHECK: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY1]], %subreg.sub1
- ; CHECK: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY4]], %subreg.sub0, [[COPY3]], %subreg.sub1
- ; CHECK: [[COPY5:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE1]]
- ; CHECK: [[GLOBAL_LOAD_DWORDX4_:%[0-9]+]]:vreg_128 = GLOBAL_LOAD_DWORDX4 [[COPY5]], 16, 0, implicit $exec :: (load (s128) from %ir.p1, align 4, !alias.scope ![[INLINE_LOAD_SCOPE:[0-9]+]], !noalias ![[INLINE_LOAD_NOALIAS:[0-9]+]], addrspace 1)
- ; CHECK: [[COPY6:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE1]]
- ; CHECK: GLOBAL_STORE_DWORDX4 [[COPY6]], killed [[GLOBAL_LOAD_DWORDX4_]], 0, 0, implicit $exec :: (store (s128) into %ir.p0, align 4, !alias.scope ![[INLINE_STORE_SCOPE:[0-9]+]], !noalias ![[INLINE_STORE_NOALIAS:[0-9]+]], addrspace 1)
- ; CHECK: [[COPY7:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]]
- ; CHECK: [[GLOBAL_LOAD_DWORDX2_:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2 killed [[COPY7]], 0, 0, implicit $exec :: (load (s64) from %ir.1, align 4, !alias.scope ![[IR_SCOPE]], !noalias ![[IR_NOALIAS]], addrspace 1)
- ; CHECK: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[GLOBAL_LOAD_DWORDX2_]].sub0
- ; CHECK: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[GLOBAL_LOAD_DWORDX2_]].sub1
- ; CHECK: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 killed [[COPY8]], killed [[COPY9]], 0, implicit $exec
- ; CHECK: $vgpr0 = COPY [[V_ADD_U32_e64_]]
- ; CHECK: SI_RETURN implicit $vgpr0
+ ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr3
+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr2
+ ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr1
+ ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr0
+ ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY]], %subreg.sub1
+ ; CHECK-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY3]], %subreg.sub0, [[COPY2]], %subreg.sub1
+ ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE1]]
+ ; CHECK-NEXT: [[GLOBAL_LOAD_DWORDX4_:%[0-9]+]]:vreg_128 = GLOBAL_LOAD_DWORDX4 [[COPY4]], 16, 0, implicit $exec :: (load (s128) from %ir.p1, align 4, !alias.scope !5, !noalias !8, addrspace 1)
+ ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE1]]
+ ; CHECK-NEXT: GLOBAL_STORE_DWORDX4 [[COPY5]], killed [[GLOBAL_LOAD_DWORDX4_]], 0, 0, implicit $exec :: (store (s128) into %ir.p0, align 4, !alias.scope !10, !noalias !11, addrspace 1)
+ ; CHECK-NEXT: [[COPY6:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]]
+ ; CHECK-NEXT: [[GLOBAL_LOAD_DWORDX2_:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2 killed [[COPY6]], 0, 0, implicit $exec :: (load (s64) from %ir.1, align 4, !alias.scope !3, !noalias !0, addrspace 1)
+ ; CHECK-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[GLOBAL_LOAD_DWORDX2_]].sub0
+ ; CHECK-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[GLOBAL_LOAD_DWORDX2_]].sub1
+ ; CHECK-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 killed [[COPY7]], killed [[COPY8]], 0, implicit $exec
+ ; CHECK-NEXT: $vgpr0 = COPY [[V_ADD_U32_e64_]]
+ ; CHECK-NEXT: SI_RETURN implicit $vgpr0
%3:vgpr_32 = COPY $vgpr3
%2:vgpr_32 = COPY $vgpr2
%1:vgpr_32 = COPY $vgpr1
diff --git a/llvm/test/CodeGen/MIR/X86/machine-metadata.mir b/llvm/test/CodeGen/MIR/X86/machine-metadata.mir
index cb782c88b40b4b..5c4806a0396648 100644
--- a/llvm/test/CodeGen/MIR/X86/machine-metadata.mir
+++ b/llvm/test/CodeGen/MIR/X86/machine-metadata.mir
@@ -54,7 +54,7 @@
!0 = !{!1}
!1 = distinct !{!1, !2, !"bax: %p"}
- !2 = distinct !{!2, !"bax"}
+ !2 = distinct !{!2, i1 false, !"bax"}
!3 = !{!4}
!4 = distinct !{!4, !2, !"bax: %q"}
@@ -74,16 +74,18 @@ body: |
liveins: $rdi, $rsi
; CHECK-LABEL: name: test_memcpy
- ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rsi
- ; CHECK: [[COPY1:%[0-9]+]]:gr64 = COPY $rdi
- ; CHECK: [[MOV64rm:%[0-9]+]]:gr64 = MOV64rm [[COPY1]], 1, $noreg, 16, $noreg :: (load (s64) from %ir.p1, align 4, !alias.scope ![[MEMCPY_LOAD_SCOPE:[0-9]+]], !noalias ![[MEMCPY_LOAD_NOALIAS:[0-9]+]])
- ; CHECK: [[MOV64rm1:%[0-9]+]]:gr64 = MOV64rm [[COPY1]], 1, $noreg, 24, $noreg :: (load (s64) from %ir.p1 + 8, align 4, !alias.scope ![[MEMCPY_LOAD_SCOPE]], !noalias ![[MEMCPY_LOAD_NOALIAS]])
- ; CHECK: MOV64mr [[COPY1]], 1, $noreg, 8, $noreg, killed [[MOV64rm1]] :: (store (s64) into %ir.p0 + 8, align 4, !alias.scope ![[MEMCPY_STORE_SCOPE:[0-9]+]], !noalias ![[MEMCPY_STORE_NOALIAS:[0-9]+]])
- ; CHECK: MOV64mr [[COPY1]], 1, $noreg, 0, $noreg, killed [[MOV64rm]] :: (store (s64) into %ir.p0, align 4, !alias.scope ![[MEMCPY_STORE_SCOPE]], !noalias ![[MEMCPY_STORE_NOALIAS]])
- ; CHECK: [[MOV32rm:%[0-9]+]]:gr32 = MOV32rm [[COPY]], 1, $noreg, 0, $noreg :: (load (s32) from %ir.q, !alias.scope ![[IR_SCOPE:[0-9]+]], !noalias ![[IR_NOALIAS:[0-9]+]])
- ; CHECK: [[ADD32rm:%[0-9]+]]:gr32 = ADD32rm [[MOV32rm]], [[COPY]], 1, $noreg, 4, $noreg, implicit-def dead $eflags :: (load (s32) from %ir.q1, !alias.scope ![[IR_SCOPE]], !noalias ![[IR_NOALIAS]])
- ; CHECK: $eax = COPY [[ADD32rm]]
- ; CHECK: RET 0, $eax
+ ; CHECK: liveins: $rdi, $rsi
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64 = COPY $rsi
+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr64 = COPY $rdi
+ ; CHECK-NEXT: [[MOV64rm:%[0-9]+]]:gr64 = MOV64rm [[COPY1]], 1, $noreg, 16, $noreg :: (load (s64) from %ir.p1, align 4, !alias.scope !5, !noalias !8)
+ ; CHECK-NEXT: [[MOV64rm1:%[0-9]+]]:gr64 = MOV64rm [[COPY1]], 1, $noreg, 24, $noreg :: (load (s64) from %ir.p1 + 8, align 4, !alias.scope !5, !noalias !8)
+ ; CHECK-NEXT: MOV64mr [[COPY1]], 1, $noreg, 8, $noreg, killed [[MOV64rm1]] :: (store (s64) into %ir.p0 + 8, align 4, !alias.scope !10, !noalias !11)
+ ; CHECK-NEXT: MOV64mr [[COPY1]], 1, $noreg, 0, $noreg, killed [[MOV64rm]] :: (store (s64) into %ir.p0, align 4, !alias.scope !10, !noalias !11)
+ ; CHECK-NEXT: [[MOV32rm:%[0-9]+]]:gr32 = MOV32rm [[COPY]], 1, $noreg, 0, $noreg :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)
+ ; CHECK-NEXT: [[ADD32rm:%[0-9]+]]:gr32 = ADD32rm [[MOV32rm]], [[COPY]], 1, $noreg, 4, $noreg, implicit-def dead $eflags :: (load (s32) from %ir.q1, !alias.scope !3, !noalias !0)
+ ; CHECK-NEXT: $eax = COPY [[ADD32rm]]
+ ; CHECK-NEXT: RET 0, $eax
%1:gr64 = COPY $rsi
%0:gr64 = COPY $rdi
%2:gr64 = MOV64rm %0, 1, $noreg, 16, $noreg :: (load (s64) from %ir.p1, align 4, !alias.scope !5, !noalias !8)
@@ -111,16 +113,18 @@ body: |
liveins: $rdi, $rsi
; CHECK-LABEL: name: test_memcpy_inline
- ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rsi
- ; CHECK: [[COPY1:%[0-9]+]]:gr64 = COPY $rdi
- ; CHECK: [[MOV64rm:%[0-9]+]]:gr64 = MOV64rm [[COPY1]], 1, $noreg, 16, $noreg :: (load (s64) from %ir.p1, align 4, !alias.scope ![[INLINE_LOAD_SCOPE:[0-9]+]], !noalias ![[INLINE_LOAD_NOALIAS:[0-9]+]])
- ; CHECK: [[MOV64rm1:%[0-9]+]]:gr64 = MOV64rm [[COPY1]], 1, $noreg, 24, $noreg :: (load (s64) from %ir.p1 + 8, align 4, !alias.scope ![[INLINE_LOAD_SCOPE]], !noalias ![[INLINE_LOAD_NOALIAS]])
- ; CHECK: MOV64mr [[COPY1]], 1, $noreg, 8, $noreg, killed [[MOV64rm1]] :: (store (s64) into %ir.p0 + 8, align 4, !alias.scope ![[INLINE_STORE_SCOPE:[0-9]+]], !noalias ![[INLINE_STORE_NOALIAS:[0-9]+]])
- ; CHECK: MOV64mr [[COPY1]], 1, $noreg, 0, $noreg, killed [[MOV64rm]] :: (store (s64) into %ir.p0, align 4, !alias.scope ![[INLINE_STORE_SCOPE]], !noalias ![[INLINE_STORE_NOALIAS]])
- ; CHECK: [[MOV32rm:%[0-9]+]]:gr32 = MOV32rm [[COPY]], 1, $noreg, 0, $noreg :: (load (s32) from %ir.q, !alias.scope ![[IR_SCOPE]], !noalias ![[IR_NOALIAS]])
- ; CHECK: [[ADD32rm:%[0-9]+]]:gr32 = ADD32rm [[MOV32rm]], [[COPY]], 1, $noreg, 4, $noreg, implicit-def dead $eflags :: (load (s32) from %ir.q1, !alias.scope ![[IR_SCOPE]], !noalias ![[IR_NOALIAS]])
- ; CHECK: $eax = COPY [[ADD32rm]]
- ; CHECK: RET 0, $eax
+ ; CHECK: liveins: $rdi, $rsi
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64 = COPY $rsi
+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr64 = COPY $rdi
+ ; CHECK-NEXT: [[MOV64rm:%[0-9]+]]:gr64 = MOV64rm [[COPY1]], 1, $noreg, 16, $noreg :: (load (s64) from %ir.p1, align 4, !alias.scope !5, !noalias !8)
+ ; CHECK-NEXT: [[MOV64rm1:%[0-9]+]]:gr64 = MOV64rm [[COPY1]], 1, $noreg, 24, $noreg :: (load (s64) from %ir.p1 + 8, align 4, !alias.scope !5, !noalias !8)
+ ; CHECK-NEXT: MOV64mr [[COPY1]], 1, $noreg, 8, $noreg, killed [[MOV64rm1]] :: (store (s64) into %ir.p0 + 8, align 4, !alias.scope !10, !noalias !11)
+ ; CHECK-NEXT: MOV64mr [[COPY1]], 1, $noreg, 0, $noreg, killed [[MOV64rm]] :: (store (s64) into %ir.p0, align 4, !alias.scope !10, !noalias !11)
+ ; CHECK-NEXT: [[MOV32rm:%[0-9]+]]:gr32 = MOV32rm [[COPY]], 1, $noreg, 0, $noreg :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)
+ ; CHECK-NEXT: [[ADD32rm:%[0-9]+]]:gr32 = ADD32rm [[MOV32rm]], [[COPY]], 1, $noreg, 4, $noreg, implicit-def dead $eflags :: (load (s32) from %ir.q1, !alias.scope !3, !noalias !0)
+ ; CHECK-NEXT: $eax = COPY [[ADD32rm]]
+ ; CHECK-NEXT: RET 0, $eax
%1:gr64 = COPY $rsi
%0:gr64 = COPY $rdi
%2:gr64 = MOV64rm %0, 1, $noreg, 16, $noreg :: (load (s64) from %ir.p1, align 4, !alias.scope !5, !noalias !8)
@@ -148,16 +152,18 @@ body: |
liveins: $rdi, $rsi
; CHECK-LABEL: name: test_mempcpy
- ; CHECK: [[COPY:%[0-9]+]]:gr64 = COPY $rsi
- ; CHECK: [[COPY1:%[0-9]+]]:gr64 = COPY $rdi
- ; CHECK: [[MOV64rm:%[0-9]+]]:gr64 = MOV64rm [[COPY1]], 1, $noreg, 16, $noreg :: (load (s64) from %ir.p1, align 1, !alias.scope ![[MEMPCPY_LOAD_SCOPE:[0-9]+]], !noalias ![[MEMPCPY_LOAD_NOALIAS:[0-9]+]])
- ; CHECK: [[MOV64rm1:%[0-9]+]]:gr64 = MOV64rm [[COPY1]], 1, $noreg, 24, $noreg :: (load (s64) from %ir.p1 + 8, align 1, !alias.scope ![[MEMPCPY_LOAD_SCOPE]], !noalias ![[MEMPCPY_LOAD_NOALIAS]])
- ; CHECK: MOV64mr [[COPY1]], 1, $noreg, 8, $noreg, killed [[MOV64rm1]] :: (store (s64) into %ir.p0 + 8, align 1, !alias.scope ![[MEMPCPY_STORE_SCOPE:[0-9]+]], !noalias ![[MEMPCPY_STORE_NOALIAS:[0-9]+]])
- ; CHECK: MOV64mr [[COPY1]], 1, $noreg, 0, $noreg, killed [[MOV64rm]] :: (store (s64) into %ir.p0, align 1, !alias.scope ![[MEMPCPY_STORE_SCOPE]], !noalias ![[MEMPCPY_STORE_NOALIAS]])
- ; CHECK: [[MOV32rm:%[0-9]+]]:gr32 = MOV32rm [[COPY]], 1, $noreg, 0, $noreg :: (load (s32) from %ir.q, !alias.scope ![[IR_SCOPE]], !noalias ![[IR_NOALIAS]])
- ; CHECK: [[ADD32rm:%[0-9]+]]:gr32 = ADD32rm [[MOV32rm]], [[COPY]], 1, $noreg, 4, $noreg, implicit-def dead $eflags :: (load (s32) from %ir.q1, !alias.scope ![[IR_SCOPE]], !noalias ![[IR_NOALIAS]])
- ; CHECK: $eax = COPY [[ADD32rm]]
- ; CHECK: RET 0, $eax
+ ; CHECK: liveins: $rdi, $rsi
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64 = COPY $rsi
+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr64 = COPY $rdi
+ ; CHECK-NEXT: [[MOV64rm:%[0-9]+]]:gr64 = MOV64rm [[COPY1]], 1, $noreg, 16, $noreg :: (load (s64) from %ir.p1, align 1, !alias.scope !5, !noalias !8)
+ ; CHECK-NEXT: [[MOV64rm1:%[0-9]+]]:gr64 = MOV64rm [[COPY1]], 1, $noreg, 24, $noreg :: (load (s64) from %ir.p1 + 8, align 1, !alias.scope !5, !noalias !8)
+ ; CHECK-NEXT: MOV64mr [[COPY1]], 1, $noreg, 8, $noreg, killed [[MOV64rm1]] :: (store (s64) into %ir.p0 + 8, align 1, !alias.scope !10, !noalias !11)
+ ; CHECK-NEXT: MOV64mr [[COPY1]], 1, $noreg, 0, $noreg, killed [[MOV64rm]] :: (store (s64) into %ir.p0, align 1, !alias.scope !10, !noalias !11)
+ ; CHECK-NEXT: [[MOV32rm:%[0-9]+]]:gr32 = MOV32rm [[COPY]], 1, $noreg, 0, $noreg :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)
+ ; CHECK-NEXT: [[ADD32rm:%[0-9]+]]:gr32 = ADD32rm [[MOV32rm]], [[COPY]], 1, $noreg, 4, $noreg, implicit-def dead $eflags :: (load (s32) from %ir.q1, !alias.scope !3, !noalias !0)
+ ; CHECK-NEXT: $eax = COPY [[ADD32rm]]
+ ; CHECK-NEXT: RET 0, $eax
%1:gr64 = COPY $rsi
%0:gr64 = COPY $rdi
%2:gr64 = MOV64rm %0, 1, $noreg, 16, $noreg :: (load (s64) from %ir.p1, align 1, !alias.scope !5, !noalias !8)
diff --git a/llvm/test/CodeGen/MIR/X86/memory-operands.mir b/llvm/test/CodeGen/MIR/X86/memory-operands.mir
index b738dd9b12b511..838d5119a6b324 100644
--- a/llvm/test/CodeGen/MIR/X86/memory-operands.mir
+++ b/llvm/test/CodeGen/MIR/X86/memory-operands.mir
@@ -159,7 +159,7 @@
!9 = !{!10}
!10 = distinct !{!10, !11, !"some scope"}
- !11 = distinct !{!11, !"some domain"}
+ !11 = distinct !{!11, i1 false, !"some domain"}
define zeroext i1 @range_metadata(ptr %x) {
entry:
diff --git a/llvm/test/CodeGen/PowerPC/non-simple-args-intrin.ll b/llvm/test/CodeGen/PowerPC/non-simple-args-intrin.ll
index 38d183e3b24c9c..3de5ac59a5c727 100644
--- a/llvm/test/CodeGen/PowerPC/non-simple-args-intrin.ll
+++ b/llvm/test/CodeGen/PowerPC/non-simple-args-intrin.ll
@@ -52,7 +52,7 @@ attributes #1 = { nounwind readnone speculatable }
!3 = !{!"Simple C/C++ TBAA"}
!4 = !{!5}
!5 = distinct !{!5, !6}
-!6 = distinct !{!6, !"LVerDomain"}
+!6 = distinct !{!6, i1 false, !"LVerDomain"}
!7 = !{!8}
!8 = distinct !{!8, !6}
!9 = !{!10, !11, !5}
diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-barrier.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-barrier.ll
index fd76475d6a5bcb..cb463f63e24d76 100644
--- a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-barrier.ll
+++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-barrier.ll
@@ -16,4 +16,4 @@ declare dso_local spir_func void @_Z22__spirv_ControlBarrierjjj(i32, i32, i32)
!1 = !{!2}
!2 = distinct !{!2, !3}
-!3 = distinct !{!3}
+!3 = distinct !{!3, i1 false}
diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-copy-memory.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-copy-memory.ll
index 89bdfbc2bd96d5..ddd61bd9e0bbbf 100644
--- a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-copy-memory.ll
+++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-copy-memory.ll
@@ -22,4 +22,4 @@ declare void @llvm.memcpy.p1.p1.i64(ptr addrspace(1), ptr addrspace(1), i64, i1)
!1 = !{!2}
!2 = distinct !{!2, !3, !"copy_aliased: %this"}
-!3 = distinct !{!3, !"copy_aliased"}
+!3 = distinct !{!3, i1 false, !"copy_aliased"}
diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-domain-order.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-domain-order.ll
index faff3b5dcf5d60..9d4184ee6e3b7a 100644
--- a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-domain-order.ll
+++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-domain-order.ll
@@ -20,6 +20,6 @@ entry:
!0 = !{!1}
!1 = distinct !{!1, !2, !"foo: %a"}
-!2 = distinct !{!2, !"foo"}
+!2 = distinct !{!2, i1 false, !"foo"}
!3 = !{!4}
!4 = distinct !{!4, !2, !"foo: %b"}
diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-load-store-atomic.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-load-store-atomic.ll
index 6d721fb49dabc9..5ecd9926ccc6ac 100644
--- a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-load-store-atomic.ll
+++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-load-store-atomic.ll
@@ -41,13 +41,13 @@ declare spir_func void @_Z19__spirv_AtomicStorePU3AS4iiii(ptr addrspace(4), i32,
!1 = !{!2}
!2 = distinct !{!2, !3}
-!3 = distinct !{!3}
+!3 = distinct !{!3, i1 false}
!4 = !{!5}
!5 = distinct !{!5, !6}
-!6 = distinct !{!6}
+!6 = distinct !{!6, i1 false}
!7 = !{!8}
!8 = distinct !{!8, !9}
-!9 = distinct !{!9}
+!9 = distinct !{!9, i1 false}
!10 = !{!11}
!11 = distinct !{!11, !12}
-!12 = distinct !{!12}
+!12 = distinct !{!12, i1 false}
diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-load-store-struct.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-load-store-struct.ll
index 73975649dbd96e..c84bbe4cbc039e 100644
--- a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-load-store-struct.ll
+++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-load-store-struct.ll
@@ -23,4 +23,4 @@ entry:
!1 = !{!2}
!2 = distinct !{!2, !3, !"foo: %this"}
-!3 = distinct !{!3, !"foo"}
+!3 = distinct !{!3, i1 false, !"foo"}
diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-load-store.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-load-store.ll
index 0f00f812f9f2d1..944c19e79fae95 100644
--- a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-load-store.ll
+++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-load-store.ll
@@ -57,10 +57,10 @@ entry:
!1 = !{!2}
!2 = distinct !{!2, !3, !"foo: %this"}
-!3 = distinct !{!3, !"foo"}
+!3 = distinct !{!3, i1 false, !"foo"}
!4 = !{!5}
!5 = distinct !{!5, !6, !"boo: %this"}
-!6 = distinct !{!6, !"boo"}
+!6 = distinct !{!6, i1 false, !"boo"}
!7 = !{!8}
!8 = distinct !{!8, !9, !"foo: %this"}
-!9 = distinct !{!9, !"foo"}
+!9 = distinct !{!9, i1 false, !"foo"}
diff --git a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-masked-load-store.ll b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-masked-load-store.ll
index bb7c90eae3ecdc..dd9e1e92b75b1e 100644
--- a/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-masked-load-store.ll
+++ b/llvm/test/CodeGen/SPIRV/extensions/SPV_INTEL_memory_access_aliasing/alias-masked-load-store.ll
@@ -75,10 +75,10 @@ entry:
!1 = !{!2}
!2 = distinct !{!2, !3, !"foo: %this"}
-!3 = distinct !{!3, !"foo"}
+!3 = distinct !{!3, i1 false, !"foo"}
!4 = !{!5}
!5 = distinct !{!5, !6, !"boo: %this"}
-!6 = distinct !{!6, !"boo"}
+!6 = distinct !{!6, i1 false, !"boo"}
!7 = !{!8}
!8 = distinct !{!8, !9, !"foo: %this"}
-!9 = distinct !{!9, !"foo"}
+!9 = distinct !{!9, i1 false, !"foo"}
diff --git a/llvm/test/CodeGen/SPIRV/llvm-intrinsics/noalias-scope-decl.ll b/llvm/test/CodeGen/SPIRV/llvm-intrinsics/noalias-scope-decl.ll
index 825b7b1467a13b..2d6e99c02f7d2a 100644
--- a/llvm/test/CodeGen/SPIRV/llvm-intrinsics/noalias-scope-decl.ll
+++ b/llvm/test/CodeGen/SPIRV/llvm-intrinsics/noalias-scope-decl.ll
@@ -19,4 +19,4 @@ declare void @llvm.experimental.noalias.scope.decl(metadata)
!0 = !{!1}
!1 = distinct !{!1, !2, !"foo: %a"}
-!2 = distinct !{!2, !"foo"}
+!2 = distinct !{!2, i1 false, !"foo"}
diff --git a/llvm/test/CodeGen/SystemZ/subregliveness-01.ll b/llvm/test/CodeGen/SystemZ/subregliveness-01.ll
index 76785b22b1bf42..8afddc3421301f 100644
--- a/llvm/test/CodeGen/SystemZ/subregliveness-01.ll
+++ b/llvm/test/CodeGen/SystemZ/subregliveness-01.ll
@@ -40,7 +40,7 @@ attributes #0 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disa
!0 = !{!"clang version 8.0.0"}
!1 = !{!2}
!2 = distinct !{!2, !3, !"func_1: %agg.result"}
-!3 = distinct !{!3, !"func_1"}
+!3 = distinct !{!3, i1 false, !"func_1"}
!4 = !{!5, !5, i64 0}
!5 = !{!"long", !6, i64 0}
!6 = !{!"omnipotent char", !7, i64 0}
diff --git a/llvm/test/CodeGen/X86/dbg-distringtype-uint.ll b/llvm/test/CodeGen/X86/dbg-distringtype-uint.ll
index f229ab1a6e34fa..16e2c2812fc39d 100644
--- a/llvm/test/CodeGen/X86/dbg-distringtype-uint.ll
+++ b/llvm/test/CodeGen/X86/dbg-distringtype-uint.ll
@@ -107,7 +107,7 @@ attributes #3 = { nofree nosync nounwind readnone speculatable willreturn }
!41 = !DILocation(line: 19, column: 5, scope: !2, inlinedAt: !39)
!42 = !{!43}
!43 = distinct !{!43, !44, !"semiempirical_corrections_mp_esym_: %semiempirical_corrections_mp_esym_$ESYM"}
-!44 = distinct !{!44, !"semiempirical_corrections_mp_esym_"}
+!44 = distinct !{!44, i1 false, !"semiempirical_corrections_mp_esym_"}
!45 = !{!46}
!46 = distinct !{!46, !44, !"semiempirical_corrections_mp_esym_: %I"}
!48 = !DILocation(line: 12, column: 1, scope: !22)
diff --git a/llvm/test/CodeGen/X86/memcpy-scoped-aa.ll b/llvm/test/CodeGen/X86/memcpy-scoped-aa.ll
index d3b86786a630c1..6116e6c6e9f0ce 100644
--- a/llvm/test/CodeGen/X86/memcpy-scoped-aa.ll
+++ b/llvm/test/CodeGen/X86/memcpy-scoped-aa.ll
@@ -5,7 +5,7 @@
; Re-evaluate the slot numbers of scopes as that numbering could be changed run-by-run.
-; MIR-DAG: ![[DOMAIN:[0-9]+]] = distinct !{!{{[0-9]+}}, !"bax"}
+; MIR-DAG: ![[DOMAIN:[0-9]+]] = distinct !{!{{[0-9]+}}, i1 false, !"bax"}
; MIR-DAG: ![[SCOPE0:[0-9]+]] = distinct !{!{{[0-9]+}}, ![[DOMAIN]], !"bax: %p"}
; MIR-DAG: ![[SCOPE1:[0-9]+]] = distinct !{!{{[0-9]+}}, ![[DOMAIN]], !"bax: %q"}
; MIR-DAG: ![[SET0:[0-9]+]] = !{![[SCOPE0]]}
@@ -145,7 +145,7 @@ declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg)
declare ptr @mempcpy(ptr, ptr, i64)
-!0 = distinct !{!0, !"bax"}
+!0 = distinct !{!0, i1 false, !"bax"}
!1 = distinct !{!1, !0, !"bax: %p"}
!2 = !{!1}
!3 = distinct !{!3, !0, !"bax: %q"}
diff --git a/llvm/test/CodeGen/X86/pr48727.ll b/llvm/test/CodeGen/X86/pr48727.ll
index 50b38a8b0a6fc6..57fb008c3c416b 100644
--- a/llvm/test/CodeGen/X86/pr48727.ll
+++ b/llvm/test/CodeGen/X86/pr48727.ll
@@ -42,4 +42,4 @@ entry:
!0 = !{}
!1 = !{!2}
!2 = !{!"buffer: {index:1, offset:0, size:20000}", !3}
-!3 = !{!"XLA global AA domain"}
+!3 = !{!"XLA global AA domain", i1 false}
diff --git a/llvm/test/DebugInfo/COFF/fortran-contained-proc.ll b/llvm/test/DebugInfo/COFF/fortran-contained-proc.ll
index a9371cd7b08860..075046138dfdcc 100644
--- a/llvm/test/DebugInfo/COFF/fortran-contained-proc.ll
+++ b/llvm/test/DebugInfo/COFF/fortran-contained-proc.ll
@@ -119,7 +119,7 @@ attributes #4 = { nounwind }
!40 = !{!"ifx$root$2$IF_TEST_ip_SUB"}
!41 = !{!42}
!42 = distinct !{!42, !43, !"IF_TEST_ip_SUB: %AA"}
-!43 = distinct !{!43, !"IF_TEST_ip_SUB"}
+!43 = distinct !{!43, i1 false, !"IF_TEST_ip_SUB"}
!44 = !DILocation(line: 16, scope: !2)
!45 = !DILocation(line: 17, scope: !30)
!46 = !DILocation(line: 0, scope: !30)
diff --git a/llvm/test/DebugInfo/Generic/sroa-samesize.ll b/llvm/test/DebugInfo/Generic/sroa-samesize.ll
index 911f90c8e06c91..233aa31b43cb4b 100644
--- a/llvm/test/DebugInfo/Generic/sroa-samesize.ll
+++ b/llvm/test/DebugInfo/Generic/sroa-samesize.ll
@@ -97,7 +97,7 @@ attributes #0 = { nounwind readnone speculatable }
!46 = !DILocation(line: 8, column: 8, scope: !12, inlinedAt: !25)
!47 = !{!48}
!48 = distinct !{!48, !49, !"\01?x5@@YA?AUx2@@XZ: %agg.result"}
-!49 = distinct !{!49, !"\01?x5@@YA?AUx2@@XZ"}
+!49 = distinct !{!49, i1 false, !"\01?x5@@YA?AUx2@@XZ"}
!50 = !DILocation(line: 3, column: 13, scope: !51, inlinedAt: !56)
!51 = distinct !DISubprogram(name: "x2", linkageName: "\01??0x2@@QEAA at H@Z", scope: !15, file: !1, line: 3, type: !20, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true, unit: !0, declaration: !19, retainedNodes: !52)
!52 = !{!53, !54}
diff --git a/llvm/test/DebugInfo/X86/global-sra-struct-part-overlap-segment.ll b/llvm/test/DebugInfo/X86/global-sra-struct-part-overlap-segment.ll
index 3dd4d9c6cca7f9..a63fbee0a6e6d9 100644
--- a/llvm/test/DebugInfo/X86/global-sra-struct-part-overlap-segment.ll
+++ b/llvm/test/DebugInfo/X86/global-sra-struct-part-overlap-segment.ll
@@ -190,7 +190,7 @@ declare void @llvm.experimental.noalias.scope.decl(metadata)
!22 = distinct !DISubprogram(name: "foo", scope: !2, file: !4, line: 5, type: !10, scopeLine: 5, flags: DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !3)
!23 = !{!24}
!24 = distinct !{!24, !25, !"mymod_bar_: %bar"}
-!25 = distinct !{!25, !"mymod_bar_"}
+!25 = distinct !{!25, i1 false, !"mymod_bar_"}
!26 = !{!27}
!27 = distinct !{!27, !25, !"mymod_bar_: %arg"}
!28 = !{!24, !27}
diff --git a/llvm/test/Transforms/AggressiveInstCombine/AArch64/or-load.ll b/llvm/test/Transforms/AggressiveInstCombine/AArch64/or-load.ll
index 0a00083c340b9e..925848ed4c5e6d 100644
--- a/llvm/test/Transforms/AggressiveInstCombine/AArch64/or-load.ll
+++ b/llvm/test/Transforms/AggressiveInstCombine/AArch64/or-load.ll
@@ -1325,7 +1325,7 @@ define i32 @loadCombine_4consecutive_metadata(ptr %p, ptr %pstr) {
ret i32 %o3
}
-!0 = distinct !{!0}
+!0 = distinct !{!0, i1 false}
!1 = distinct !{!1, !0}
!2 = !{!1}
diff --git a/llvm/test/Transforms/AggressiveInstCombine/X86/or-load.ll b/llvm/test/Transforms/AggressiveInstCombine/X86/or-load.ll
index d8ab24c7b7eb1f..5ee9c8328d4c92 100644
--- a/llvm/test/Transforms/AggressiveInstCombine/X86/or-load.ll
+++ b/llvm/test/Transforms/AggressiveInstCombine/X86/or-load.ll
@@ -1426,7 +1426,7 @@ define i32 @loadCombine_4consecutive_metadata(ptr %p, ptr %pstr) {
ret i32 %o3
}
-!0 = distinct !{!0}
+!0 = distinct !{!0, i1 false}
!1 = distinct !{!1, !0}
!2 = !{!1}
diff --git a/llvm/test/Transforms/AggressiveInstCombine/X86/store-merge.ll b/llvm/test/Transforms/AggressiveInstCombine/X86/store-merge.ll
index ef7e44fcf775bd..04bfcf191b79df 100644
--- a/llvm/test/Transforms/AggressiveInstCombine/X86/store-merge.ll
+++ b/llvm/test/Transforms/AggressiveInstCombine/X86/store-merge.ll
@@ -900,11 +900,11 @@ define void @test_zext_store(i56 %arg, ptr %p) {
!0 = !{!1}
!1 = !{!1, !2}
-!2 = !{!2}
+!2 = !{!2, i1 false}
!3 = !{!4}
!4 = !{!4, !5}
-!5 = !{!5}
+!5 = !{!5, i1 false}
!6 = !{!7, !7, i64 0}
!7 = !{!"short", !8, i64 0}
@@ -913,6 +913,6 @@ define void @test_zext_store(i56 %arg, ptr %p) {
;.
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
-; CHECK: [[META2]] = distinct !{[[META2]]}
+; CHECK: [[META2]] = distinct !{[[META2]], i1 false}
; CHECK: [[META3]] = !{}
;.
diff --git a/llvm/test/Transforms/AtomicExpand/AMDGPU/expand-atomic-i16.ll b/llvm/test/Transforms/AtomicExpand/AMDGPU/expand-atomic-i16.ll
index 8fa9b5419ec795..ff501cd9eefc5a 100644
--- a/llvm/test/Transforms/AtomicExpand/AMDGPU/expand-atomic-i16.ll
+++ b/llvm/test/Transforms/AtomicExpand/AMDGPU/expand-atomic-i16.ll
@@ -2073,7 +2073,7 @@ define i16 @test_atomicrmw_usub_sat_i16_flat_agent_align4(ptr %ptr, i16 %value)
!1 = !{!"foo", !"bar"}
!2 = !{!3}
!3 = distinct !{!3, !4}
-!4 = distinct !{!4}
+!4 = distinct !{!4, i1 false}
!5 = !{i64 0, i64 4, !1, i64 8, i64 4}
!6 = !{!7, !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
diff --git a/llvm/test/Transforms/DFAJumpThreading/dfa-jump-threading-transform.ll b/llvm/test/Transforms/DFAJumpThreading/dfa-jump-threading-transform.ll
index f8801378b23053..58fc3a5542fa21 100644
--- a/llvm/test/Transforms/DFAJumpThreading/dfa-jump-threading-transform.ll
+++ b/llvm/test/Transforms/DFAJumpThreading/dfa-jump-threading-transform.ll
@@ -732,7 +732,7 @@ declare void @llvm.experimental.noalias.scope.decl(metadata)
!1 = !{!"branch_weights", i32 3, i32 5}
!2 = !{!3}
!3 = distinct !{!3, !4, !"scope1"}
-!4 = distinct !{!4, !"domain"}
+!4 = distinct !{!4, i1 false, !"domain"}
;.
; CHECK: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
;.
@@ -740,7 +740,7 @@ declare void @llvm.experimental.noalias.scope.decl(metadata)
; CHECK: [[PROF1]] = !{!"branch_weights", i32 3, i32 5}
; CHECK: [[META2]] = !{[[META3:![0-9]+]]}
; CHECK: [[META3]] = distinct !{[[META3]], [[META4:![0-9]+]], !"scope1"}
-; CHECK: [[META4]] = distinct !{[[META4]], !"domain"}
+; CHECK: [[META4]] = distinct !{[[META4]], i1 false, !"domain"}
; CHECK: [[META5]] = !{[[META6:![0-9]+]]}
; CHECK: [[META6]] = distinct !{[[META6]], [[META4]], !"scope1:dfa"}
; CHECK: [[META7]] = !{[[META8:![0-9]+]]}
diff --git a/llvm/test/Transforms/DeadStoreElimination/merge-stores.ll b/llvm/test/Transforms/DeadStoreElimination/merge-stores.ll
index f38c7d7b4aacc9..0f908153e07337 100644
--- a/llvm/test/Transforms/DeadStoreElimination/merge-stores.ll
+++ b/llvm/test/Transforms/DeadStoreElimination/merge-stores.ll
@@ -250,6 +250,6 @@ define void @killing_store_atomic_unordered(ptr %p) {
!29 = !{i32 1}
; Domains and scopes which might alias
-!30 = !{!30}
+!30 = !{!30, i1 false}
!31 = !{!31, !30}
!32 = !{!31}
diff --git a/llvm/test/Transforms/DeadStoreElimination/scoped-noalias.ll b/llvm/test/Transforms/DeadStoreElimination/scoped-noalias.ll
index a9ca0f9ec8c0b0..fdda2388f98219 100644
--- a/llvm/test/Transforms/DeadStoreElimination/scoped-noalias.ll
+++ b/llvm/test/Transforms/DeadStoreElimination/scoped-noalias.ll
@@ -29,6 +29,6 @@ else:
ret void
}
-!0 = !{!0}
+!0 = !{!0, i1 false}
!1 = !{!1, !0}
!2 = !{!1}
diff --git a/llvm/test/Transforms/EarlyCSE/noalias-scope-decl.ll b/llvm/test/Transforms/EarlyCSE/noalias-scope-decl.ll
index 6b20bd6662f866..8e27a1ac0e225e 100644
--- a/llvm/test/Transforms/EarlyCSE/noalias-scope-decl.ll
+++ b/llvm/test/Transforms/EarlyCSE/noalias-scope-decl.ll
@@ -35,4 +35,4 @@ declare void @llvm.experimental.noalias.scope.decl(metadata)
!0 = !{ !1 }
!1 = distinct !{ !1, !2 }
-!2 = distinct !{ !2 }
+!2 = distinct !{!2, i1 false}
diff --git a/llvm/test/Transforms/GVN/noalias.ll b/llvm/test/Transforms/GVN/noalias.ll
index f28023d2709464..5e84f8119e6c22 100644
--- a/llvm/test/Transforms/GVN/noalias.ll
+++ b/llvm/test/Transforms/GVN/noalias.ll
@@ -44,7 +44,7 @@ declare i32 @foo(ptr) readonly
!0 = distinct !{!0, !2, !"callee0: %a"}
!1 = distinct !{!1, !2, !"callee0: %b"}
-!2 = distinct !{!2, !"callee0"}
+!2 = distinct !{!2, i1 false, !"callee0"}
!3 = !{!0}
!4 = !{!1}
@@ -52,7 +52,7 @@ declare i32 @foo(ptr) readonly
;.
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]], !"callee0: %a"}
-; CHECK: [[META2]] = distinct !{[[META2]], !"callee0"}
+; CHECK: [[META2]] = distinct !{[[META2]], i1 false, !"callee0"}
; CHECK: [[META3]] = !{[[META4:![0-9]+]]}
; CHECK: [[META4]] = distinct !{[[META4]], [[META2]], !"callee0: %b"}
;.
diff --git a/llvm/test/Transforms/GVN/rle-coerced-noalias.ll b/llvm/test/Transforms/GVN/rle-coerced-noalias.ll
index 67f7f58543aa86..1ae70ee2fa8d34 100644
--- a/llvm/test/Transforms/GVN/rle-coerced-noalias.ll
+++ b/llvm/test/Transforms/GVN/rle-coerced-noalias.ll
@@ -89,11 +89,11 @@ f:
; Alias-scope metadata domain.
!1 = distinct !{!1, !2, !"scope A"}
-!2 = distinct !{!2, !"test domain"}
+!2 = distinct !{!2, i1 false, !"test domain"}
!0 = !{!1}
;.
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]], !"scope A"}
-; CHECK: [[META2]] = distinct !{[[META2]], !"test domain"}
+; CHECK: [[META2]] = distinct !{[[META2]], i1 false, !"test domain"}
;.
diff --git a/llvm/test/Transforms/IndVarSimplify/addrec_no_exec_on_every_iteration.ll b/llvm/test/Transforms/IndVarSimplify/addrec_no_exec_on_every_iteration.ll
index d8bf1567d00edc..958cdc51ac3051 100644
--- a/llvm/test/Transforms/IndVarSimplify/addrec_no_exec_on_every_iteration.ll
+++ b/llvm/test/Transforms/IndVarSimplify/addrec_no_exec_on_every_iteration.ll
@@ -342,7 +342,7 @@ attributes #0 = { nofree norecurse nounwind uwtable denormal_fpenv(preservesign)
!3 = !{i64 1536}
!4 = !{!5}
!5 = !{!"buffer: {index:3, offset:0, size:800}", !6}
-!6 = !{!"XLA global AA domain"}
+!6 = !{!"XLA global AA domain", i1 false}
!7 = !{!8, !9}
!8 = !{!"buffer: {index:3, offset:800, size:672}", !6}
!9 = !{!"buffer: {index:3, offset:1472, size:64}", !6}
diff --git a/llvm/test/Transforms/InferAddressSpaces/AMDGPU/debug-info.ll b/llvm/test/Transforms/InferAddressSpaces/AMDGPU/debug-info.ll
index c85c3a4ada3bfe..9b05303b3dfcb7 100644
--- a/llvm/test/Transforms/InferAddressSpaces/AMDGPU/debug-info.ll
+++ b/llvm/test/Transforms/InferAddressSpaces/AMDGPU/debug-info.ll
@@ -123,7 +123,7 @@ attributes #4 = { nounwind readnone speculatable }
!25 = !{!"tbaa root"}
!26 = !{!27}
!27 = distinct !{!27, !28, !"some scope 1"}
-!28 = distinct !{!28, !"some domain"}
+!28 = distinct !{!28, i1 false, !"some domain"}
!29 = !{!30}
!30 = distinct !{!30, !28, !"some scope 2"}
!31 = !DILocation(line: 13, column: 1, scope: !20)
diff --git a/llvm/test/Transforms/InferAddressSpaces/AMDGPU/mem-intrinsics.ll b/llvm/test/Transforms/InferAddressSpaces/AMDGPU/mem-intrinsics.ll
index 4b055f102c8a5f..2e432a7f71e85d 100644
--- a/llvm/test/Transforms/InferAddressSpaces/AMDGPU/mem-intrinsics.ll
+++ b/llvm/test/Transforms/InferAddressSpaces/AMDGPU/mem-intrinsics.ll
@@ -231,7 +231,7 @@ attributes #1 = { argmemonly nounwind }
!2 = !{!"tbaa root"}
!3 = !{!4}
!4 = distinct !{!4, !5, !"some scope 1"}
-!5 = distinct !{!5, !"some domain"}
+!5 = distinct !{!5, i1 false, !"some domain"}
!6 = !{!7}
!7 = distinct !{!7, !5, !"some scope 2"}
!8 = !{i64 0, i64 8, null}
@@ -241,7 +241,7 @@ attributes #1 = { argmemonly nounwind }
; CHECK: [[META2]] = !{!"tbaa root"}
; CHECK: [[META3]] = !{[[META4:![0-9]+]]}
; CHECK: [[META4]] = distinct !{[[META4]], [[META5:![0-9]+]], !"some scope 1"}
-; CHECK: [[META5]] = distinct !{[[META5]], !"some domain"}
+; CHECK: [[META5]] = distinct !{[[META5]], i1 false, !"some domain"}
; CHECK: [[META6]] = !{[[META7:![0-9]+]]}
; CHECK: [[META7]] = distinct !{[[META7]], [[META5]], !"some scope 2"}
; CHECK: [[TBAA_STRUCT8]] = !{i64 0, i64 8, null}
diff --git a/llvm/test/Transforms/Inline/AMDGPU/load-intrinsics.ll b/llvm/test/Transforms/Inline/AMDGPU/load-intrinsics.ll
index b67579b82bb22f..3d71e359a41408 100644
--- a/llvm/test/Transforms/Inline/AMDGPU/load-intrinsics.ll
+++ b/llvm/test/Transforms/Inline/AMDGPU/load-intrinsics.ll
@@ -35,16 +35,15 @@ entry:
store <2 x i32> %val, ptr addrspace(1) %use
ret void
}
-;.
; Check Function Attribute on decl
-; OPT: declare <2 x i32> @llvm.amdgcn.ds.read.tr4.b64.v2i32(ptr addrspace(3) captures(none)) #[[ATTR0:[0-9]+]]
declare <2 x i32> @llvm.amdgcn.ds.read.tr4.b64.v2i32(ptr addrspace(3))
-; OPT: attributes #[[ATTR0]] = { convergent nocallback nofree nounwind willreturn memory(argmem: read) }
+;.
+; OPT: attributes #[[ATTR0:[0-9]+]] = { convergent nocallback nofree nounwind willreturn memory(argmem: read) }
; OPT: attributes #[[ATTR1:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
;.
; OPT: [[META0]] = !{[[META1:![0-9]+]]}
; OPT: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]], !"callee: %addr"}
-; OPT: [[META2]] = distinct !{[[META2]], !"callee"}
+; OPT: [[META2]] = distinct !{[[META2]], i1 false, !"callee"}
; OPT: [[META3]] = !{[[META4:![0-9]+]]}
; OPT: [[META4]] = distinct !{[[META4]], [[META2]], !"callee: %use"}
;.
diff --git a/llvm/test/Transforms/Inline/noalias-calls-always.ll b/llvm/test/Transforms/Inline/noalias-calls-always.ll
index 18a65b9876412d..3634463a8c0e5a 100644
--- a/llvm/test/Transforms/Inline/noalias-calls-always.ll
+++ b/llvm/test/Transforms/Inline/noalias-calls-always.ll
@@ -94,14 +94,14 @@ attributes #2 = { nounwind uwtable }
; CHECK: !0 = !{!1}
; CHECK: !1 = distinct !{!1, !2, !"hello: %a"}
-; CHECK: !2 = distinct !{!2, !"hello"}
+; CHECK: !2 = distinct !{!2, i1 false, !"hello"}
; CHECK: !3 = !{!4}
; CHECK: !4 = distinct !{!4, !2, !"hello: %c"}
; CHECK: !5 = !{!1, !4}
; CHECK: !6 = !{!7}
; CHECK: !7 = distinct !{!7, !8, !"hello_cs: %a"}
-; CHECK: !8 = distinct !{!8, !"hello_cs"}
+; CHECK: !8 = distinct !{!8, i1 false, !"hello_cs"}
; CHECK: !9 = !{!10}
; CHECK: !10 = distinct !{!10, !8, !"hello_cs: %c"}
; CHECK: !11 = !{!7, !10}
diff --git a/llvm/test/Transforms/Inline/noalias-calls.ll b/llvm/test/Transforms/Inline/noalias-calls.ll
index 4673daefa4db22..633b5046d3d252 100644
--- a/llvm/test/Transforms/Inline/noalias-calls.ll
+++ b/llvm/test/Transforms/Inline/noalias-calls.ll
@@ -100,14 +100,14 @@ attributes #3 = { nounwind uwtable }
; CHECK: !0 = !{!1}
; CHECK: !1 = distinct !{!1, !2, !"hello: %a"}
-; CHECK: !2 = distinct !{!2, !"hello"}
+; CHECK: !2 = distinct !{!2, i1 false, !"hello"}
; CHECK: !3 = !{!4}
; CHECK: !4 = distinct !{!4, !2, !"hello: %c"}
; CHECK: !5 = !{!1, !4}
; CHECK: !6 = !{!7}
; CHECK: !7 = distinct !{!7, !8, !"hello_cs: %a"}
-; CHECK: !8 = distinct !{!8, !"hello_cs"}
+; CHECK: !8 = distinct !{!8, i1 false, !"hello_cs"}
; CHECK: !9 = !{!10}
; CHECK: !10 = distinct !{!10, !8, !"hello_cs: %c"}
; CHECK: !11 = !{!7, !10}
diff --git a/llvm/test/Transforms/Inline/noalias-calls2.ll b/llvm/test/Transforms/Inline/noalias-calls2.ll
index bbfc03bf2bef73..18b9ebe1c77be7 100644
--- a/llvm/test/Transforms/Inline/noalias-calls2.ll
+++ b/llvm/test/Transforms/Inline/noalias-calls2.ll
@@ -13,10 +13,10 @@ define void @caller_equals_callee(ptr noalias %p0, ptr noalias %p1, i32 %cnt) {
; CHECK-NEXT: entry:
; CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr [[P0]], i64 2
; CHECK-NEXT: [[ADD_PTR1:%.*]] = getelementptr inbounds i32, ptr [[P1]], i64 2
-; CHECK-NEXT: tail call void @llvm.experimental.noalias.scope.decl(metadata !0)
-; CHECK-NEXT: tail call void @llvm.experimental.noalias.scope.decl(metadata !3)
-; CHECK-NEXT: store i32 10, ptr [[ADD_PTR]], align 4, !alias.scope !0, !noalias !3
-; CHECK-NEXT: store i32 20, ptr [[ADD_PTR1]], align 4, !alias.scope !3, !noalias !0
+; CHECK-NEXT: tail call void @llvm.experimental.noalias.scope.decl(metadata [[META0:![0-9]+]])
+; CHECK-NEXT: tail call void @llvm.experimental.noalias.scope.decl(metadata [[META3:![0-9]+]])
+; CHECK-NEXT: store i32 10, ptr [[ADD_PTR]], align 4, !alias.scope [[META0]], !noalias [[META3]]
+; CHECK-NEXT: store i32 20, ptr [[ADD_PTR1]], align 4, !alias.scope [[META3]], !noalias [[META0]]
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[CNT]], 0
; CHECK-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
; CHECK: if.then:
@@ -25,15 +25,15 @@ define void @caller_equals_callee(ptr noalias %p0, ptr noalias %p1, i32 %cnt) {
; CHECK: if.else:
; CHECK-NEXT: [[ADD_PTR2:%.*]] = getelementptr inbounds i32, ptr [[P1]], i64 1
; CHECK-NEXT: [[ADD_PTR3:%.*]] = getelementptr inbounds i32, ptr [[P0]], i64 1
-; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !5)
-; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !8)
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META5:![0-9]+]])
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META8:![0-9]+]])
; CHECK-NEXT: [[ADD_PTR_I:%.*]] = getelementptr inbounds i32, ptr [[ADD_PTR2]], i64 2
; CHECK-NEXT: [[ADD_PTR1_I:%.*]] = getelementptr inbounds i32, ptr [[ADD_PTR3]], i64 2
-; CHECK-NEXT: tail call void @llvm.experimental.noalias.scope.decl(metadata !10)
-; CHECK-NEXT: tail call void @llvm.experimental.noalias.scope.decl(metadata !13)
-; CHECK-NEXT: store i32 10, ptr [[ADD_PTR_I]], align 4, !alias.scope !15, !noalias !16
-; CHECK-NEXT: store i32 20, ptr [[ADD_PTR1_I]], align 4, !alias.scope !16, !noalias !15
-; CHECK-NEXT: store i32 11, ptr [[ADD_PTR2]], align 4, !alias.scope !5, !noalias !8
+; CHECK-NEXT: tail call void @llvm.experimental.noalias.scope.decl(metadata [[META10:![0-9]+]])
+; CHECK-NEXT: tail call void @llvm.experimental.noalias.scope.decl(metadata [[META13:![0-9]+]])
+; CHECK-NEXT: store i32 10, ptr [[ADD_PTR_I]], align 4, !alias.scope [[META15:![0-9]+]], !noalias [[META16:![0-9]+]]
+; CHECK-NEXT: store i32 20, ptr [[ADD_PTR1_I]], align 4, !alias.scope [[META16]], !noalias [[META15]]
+; CHECK-NEXT: store i32 11, ptr [[ADD_PTR2]], align 4, !alias.scope [[META5]], !noalias [[META8]]
; CHECK-NEXT: store i32 12, ptr [[P1]], align 4
; CHECK-NEXT: br label [[IF_END]]
; CHECK: if.end:
@@ -71,32 +71,32 @@ define void @test01(ptr noalias %p0, ptr noalias %p1, i32 %cnt) {
; CHECK-NEXT: store i32 13, ptr [[P0]], align 4
; CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i32, ptr [[P0]], i64 1
; CHECK-NEXT: [[ADD_PTR1:%.*]] = getelementptr inbounds i32, ptr [[P1]], i64 1
-; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !17)
-; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !20)
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META17:![0-9]+]])
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META20:![0-9]+]])
; CHECK-NEXT: [[ADD_PTR_I:%.*]] = getelementptr inbounds i32, ptr [[ADD_PTR]], i64 2
; CHECK-NEXT: [[ADD_PTR1_I:%.*]] = getelementptr inbounds i32, ptr [[ADD_PTR1]], i64 2
-; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !22)
-; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !25)
-; CHECK-NEXT: store i32 10, ptr [[ADD_PTR_I]], align 4, !alias.scope !27, !noalias !28
-; CHECK-NEXT: store i32 20, ptr [[ADD_PTR1_I]], align 4, !alias.scope !28, !noalias !27
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META22:![0-9]+]])
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META25:![0-9]+]])
+; CHECK-NEXT: store i32 10, ptr [[ADD_PTR_I]], align 4, !alias.scope [[META27:![0-9]+]], !noalias [[META28:![0-9]+]]
+; CHECK-NEXT: store i32 20, ptr [[ADD_PTR1_I]], align 4, !alias.scope [[META28]], !noalias [[META27]]
; CHECK-NEXT: [[CMP_I:%.*]] = icmp eq i32 [[CNT]], 0
; CHECK-NEXT: br i1 [[CMP_I]], label [[IF_THEN_I:%.*]], label [[IF_ELSE_I:%.*]]
; CHECK: if.then.i:
-; CHECK-NEXT: store i32 11, ptr [[ADD_PTR]], align 4, !alias.scope !17, !noalias !20
+; CHECK-NEXT: store i32 11, ptr [[ADD_PTR]], align 4, !alias.scope [[META17]], !noalias [[META20]]
; CHECK-NEXT: br label [[CALLER_EQUALS_CALLEE_EXIT:%.*]]
; CHECK: if.else.i:
; CHECK-NEXT: [[ADD_PTR2_I:%.*]] = getelementptr inbounds i32, ptr [[ADD_PTR1]], i64 1
; CHECK-NEXT: [[ADD_PTR3_I:%.*]] = getelementptr inbounds i32, ptr [[ADD_PTR]], i64 1
-; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !29)
-; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !32)
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META29:![0-9]+]])
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META32:![0-9]+]])
; CHECK-NEXT: [[ADD_PTR_I_I:%.*]] = getelementptr inbounds i32, ptr [[ADD_PTR2_I]], i64 2
; CHECK-NEXT: [[ADD_PTR1_I_I:%.*]] = getelementptr inbounds i32, ptr [[ADD_PTR3_I]], i64 2
-; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !34)
-; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !37)
-; CHECK-NEXT: store i32 10, ptr [[ADD_PTR_I_I]], align 4, !alias.scope !39, !noalias !40
-; CHECK-NEXT: store i32 20, ptr [[ADD_PTR1_I_I]], align 4, !alias.scope !40, !noalias !39
-; CHECK-NEXT: store i32 11, ptr [[ADD_PTR2_I]], align 4, !alias.scope !41, !noalias !42
-; CHECK-NEXT: store i32 12, ptr [[ADD_PTR1]], align 4, !alias.scope !20, !noalias !17
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META34:![0-9]+]])
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META37:![0-9]+]])
+; CHECK-NEXT: store i32 10, ptr [[ADD_PTR_I_I]], align 4, !alias.scope [[META39:![0-9]+]], !noalias [[META40:![0-9]+]]
+; CHECK-NEXT: store i32 20, ptr [[ADD_PTR1_I_I]], align 4, !alias.scope [[META40]], !noalias [[META39]]
+; CHECK-NEXT: store i32 11, ptr [[ADD_PTR2_I]], align 4, !alias.scope [[META41:![0-9]+]], !noalias [[META42:![0-9]+]]
+; CHECK-NEXT: store i32 12, ptr [[ADD_PTR1]], align 4, !alias.scope [[META20]], !noalias [[META17]]
; CHECK-NEXT: br label [[CALLER_EQUALS_CALLEE_EXIT]]
; CHECK: caller_equals_callee.exit:
; CHECK-NEXT: ret void
@@ -113,47 +113,47 @@ attributes #0 = { inaccessiblememonly nofree nosync nounwind willreturn }
!0 = !{!1}
!1 = distinct !{!1, !2, !"do_store: %p0"}
-!2 = distinct !{!2, !"do_store"}
+!2 = distinct !{!2, i1 false, !"do_store"}
!3 = !{!4}
!4 = distinct !{!4, !2, !"do_store: %p1"}
; CHECK: !0 = !{!1}
; CHECK: !1 = distinct !{!1, !2, !"do_store: %p0"}
-; CHECK: !2 = distinct !{!2, !"do_store"}
+; CHECK: !2 = distinct !{!2, i1 false, !"do_store"}
; CHECK: !3 = !{!4}
; CHECK: !4 = distinct !{!4, !2, !"do_store: %p1"}
; CHECK: !5 = !{!6}
; CHECK: !6 = distinct !{!6, !7, !"caller_equals_callee: %p0"}
-; CHECK: !7 = distinct !{!7, !"caller_equals_callee"}
+; CHECK: !7 = distinct !{!7, i1 false, !"caller_equals_callee"}
; CHECK: !8 = !{!9}
; CHECK: !9 = distinct !{!9, !7, !"caller_equals_callee: %p1"}
; CHECK: !10 = !{!11}
; CHECK: !11 = distinct !{!11, !12, !"do_store: %p0"}
-; CHECK: !12 = distinct !{!12, !"do_store"}
+; CHECK: !12 = distinct !{!12, i1 false, !"do_store"}
; CHECK: !13 = !{!14}
; CHECK: !14 = distinct !{!14, !12, !"do_store: %p1"}
; CHECK: !15 = !{!11, !6}
; CHECK: !16 = !{!14, !9}
; CHECK: !17 = !{!18}
; CHECK: !18 = distinct !{!18, !19, !"caller_equals_callee: %p0"}
-; CHECK: !19 = distinct !{!19, !"caller_equals_callee"}
+; CHECK: !19 = distinct !{!19, i1 false, !"caller_equals_callee"}
; CHECK: !20 = !{!21}
; CHECK: !21 = distinct !{!21, !19, !"caller_equals_callee: %p1"}
; CHECK: !22 = !{!23}
; CHECK: !23 = distinct !{!23, !24, !"do_store: %p0"}
-; CHECK: !24 = distinct !{!24, !"do_store"}
+; CHECK: !24 = distinct !{!24, i1 false, !"do_store"}
; CHECK: !25 = !{!26}
; CHECK: !26 = distinct !{!26, !24, !"do_store: %p1"}
; CHECK: !27 = !{!23, !18}
; CHECK: !28 = !{!26, !21}
; CHECK: !29 = !{!30}
; CHECK: !30 = distinct !{!30, !31, !"caller_equals_callee: %p0"}
-; CHECK: !31 = distinct !{!31, !"caller_equals_callee"}
+; CHECK: !31 = distinct !{!31, i1 false, !"caller_equals_callee"}
; CHECK: !32 = !{!33}
; CHECK: !33 = distinct !{!33, !31, !"caller_equals_callee: %p1"}
; CHECK: !34 = !{!35}
; CHECK: !35 = distinct !{!35, !36, !"do_store: %p0"}
-; CHECK: !36 = distinct !{!36, !"do_store"}
+; CHECK: !36 = distinct !{!36, i1 false, !"do_store"}
; CHECK: !37 = !{!38}
; CHECK: !38 = distinct !{!38, !36, !"do_store: %p1"}
; CHECK: !39 = !{!35, !30, !21}
diff --git a/llvm/test/Transforms/Inline/noalias-cs.ll b/llvm/test/Transforms/Inline/noalias-cs.ll
index 948ed8f76ed39f..ddb22e1dfdb80e 100644
--- a/llvm/test/Transforms/Inline/noalias-cs.ll
+++ b/llvm/test/Transforms/Inline/noalias-cs.ll
@@ -9,11 +9,11 @@ define void @callee_with_metadata(ptr nocapture %a, ptr nocapture %b, ptr nocapt
; CHECK-NEXT: entry:
; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META0:![0-9]+]])
; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META3:![0-9]+]])
-; CHECK-NEXT: [[TMP0:%.*]] = load float, ptr [[C:%.*]], align 4, !noalias !5
+; CHECK-NEXT: [[TMP0:%.*]] = load float, ptr [[C:%.*]], align 4, !noalias [[META5:![0-9]+]]
; CHECK-NEXT: [[ARRAYIDX_I:%.*]] = getelementptr inbounds float, ptr [[A:%.*]], i64 5
-; CHECK-NEXT: store float [[TMP0]], ptr [[ARRAYIDX_I]], align 4, !alias.scope !0, !noalias !3
+; CHECK-NEXT: store float [[TMP0]], ptr [[ARRAYIDX_I]], align 4, !alias.scope [[META0]], !noalias [[META3]]
; CHECK-NEXT: [[ARRAYIDX1_I:%.*]] = getelementptr inbounds float, ptr [[B:%.*]], i64 8
-; CHECK-NEXT: store float [[TMP0]], ptr [[ARRAYIDX1_I]], align 4, !alias.scope !3, !noalias !0
+; CHECK-NEXT: store float [[TMP0]], ptr [[ARRAYIDX1_I]], align 4, !alias.scope [[META3]], !noalias [[META0]]
; CHECK-NEXT: [[TMP1:%.*]] = load float, ptr [[C]], align 4
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds float, ptr [[A]], i64 7
; CHECK-NEXT: store float [[TMP1]], ptr [[ARRAYIDX]], align 4
@@ -64,43 +64,43 @@ entry:
define void @caller(ptr nocapture %a, ptr nocapture %b, ptr nocapture readonly %c_ptr) #0 {
; CHECK-LABEL: @caller(
; CHECK-NEXT: entry:
-; CHECK-NEXT: [[C:%.*]] = load ptr, ptr [[C_PTR:%.*]], align 8, !alias.scope !6
-; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META9:![0-9]+]]), !noalias !6
-; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META12:![0-9]+]]), !noalias !6
-; CHECK-NEXT: [[TMP0:%.*]] = load float, ptr [[C]], align 4, !noalias !14
+; CHECK-NEXT: [[C:%.*]] = load ptr, ptr [[C_PTR:%.*]], align 8, !alias.scope [[META6:![0-9]+]]
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META9:![0-9]+]]), !noalias [[META6]]
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META12:![0-9]+]]), !noalias [[META6]]
+; CHECK-NEXT: [[TMP0:%.*]] = load float, ptr [[C]], align 4, !noalias [[META14:![0-9]+]]
; CHECK-NEXT: [[ARRAYIDX_I_I:%.*]] = getelementptr inbounds float, ptr [[A:%.*]], i64 5
-; CHECK-NEXT: store float [[TMP0]], ptr [[ARRAYIDX_I_I]], align 4, !alias.scope !9, !noalias !15
+; CHECK-NEXT: store float [[TMP0]], ptr [[ARRAYIDX_I_I]], align 4, !alias.scope [[META9]], !noalias [[META15:![0-9]+]]
; CHECK-NEXT: [[ARRAYIDX1_I_I:%.*]] = getelementptr inbounds float, ptr [[B:%.*]], i64 8
-; CHECK-NEXT: store float [[TMP0]], ptr [[ARRAYIDX1_I_I]], align 4, !alias.scope !12, !noalias !16
-; CHECK-NEXT: [[TMP1:%.*]] = load float, ptr [[C]], align 4, !noalias !6
+; CHECK-NEXT: store float [[TMP0]], ptr [[ARRAYIDX1_I_I]], align 4, !alias.scope [[META12]], !noalias [[META16:![0-9]+]]
+; CHECK-NEXT: [[TMP1:%.*]] = load float, ptr [[C]], align 4, !noalias [[META6]]
; CHECK-NEXT: [[ARRAYIDX_I:%.*]] = getelementptr inbounds float, ptr [[A]], i64 7
-; CHECK-NEXT: store float [[TMP1]], ptr [[ARRAYIDX_I]], align 4, !noalias !6
-; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META17:![0-9]+]]), !alias.scope !6
-; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META20:![0-9]+]]), !alias.scope !6
-; CHECK-NEXT: [[TMP2:%.*]] = load float, ptr [[A]], align 4, !alias.scope !6, !noalias !22
+; CHECK-NEXT: store float [[TMP1]], ptr [[ARRAYIDX_I]], align 4, !noalias [[META6]]
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META17:![0-9]+]]), !alias.scope [[META6]]
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META20:![0-9]+]]), !alias.scope [[META6]]
+; CHECK-NEXT: [[TMP2:%.*]] = load float, ptr [[A]], align 4, !alias.scope [[META6]], !noalias [[META22:![0-9]+]]
; CHECK-NEXT: [[ARRAYIDX_I_I1:%.*]] = getelementptr inbounds float, ptr [[B]], i64 5
-; CHECK-NEXT: store float [[TMP2]], ptr [[ARRAYIDX_I_I1]], align 4, !alias.scope !23, !noalias !20
+; CHECK-NEXT: store float [[TMP2]], ptr [[ARRAYIDX_I_I1]], align 4, !alias.scope [[META23:![0-9]+]], !noalias [[META20]]
; CHECK-NEXT: [[ARRAYIDX1_I_I2:%.*]] = getelementptr inbounds float, ptr [[B]], i64 8
-; CHECK-NEXT: store float [[TMP2]], ptr [[ARRAYIDX1_I_I2]], align 4, !alias.scope !24, !noalias !17
-; CHECK-NEXT: [[TMP3:%.*]] = load float, ptr [[A]], align 4, !alias.scope !6
+; CHECK-NEXT: store float [[TMP2]], ptr [[ARRAYIDX1_I_I2]], align 4, !alias.scope [[META24:![0-9]+]], !noalias [[META17]]
+; CHECK-NEXT: [[TMP3:%.*]] = load float, ptr [[A]], align 4, !alias.scope [[META6]]
; CHECK-NEXT: [[ARRAYIDX_I3:%.*]] = getelementptr inbounds float, ptr [[B]], i64 7
-; CHECK-NEXT: store float [[TMP3]], ptr [[ARRAYIDX_I3]], align 4, !alias.scope !6
-; CHECK-NEXT: [[TMP4:%.*]] = load float, ptr [[C]], align 4, !noalias !6
+; CHECK-NEXT: store float [[TMP3]], ptr [[ARRAYIDX_I3]], align 4, !alias.scope [[META6]]
+; CHECK-NEXT: [[TMP4:%.*]] = load float, ptr [[C]], align 4, !noalias [[META6]]
; CHECK-NEXT: [[ARRAYIDX_I_I4:%.*]] = getelementptr inbounds float, ptr [[A]], i64 5
-; CHECK-NEXT: store float [[TMP4]], ptr [[ARRAYIDX_I_I4]], align 4, !noalias !6
+; CHECK-NEXT: store float [[TMP4]], ptr [[ARRAYIDX_I_I4]], align 4, !noalias [[META6]]
; CHECK-NEXT: [[ARRAYIDX1_I_I5:%.*]] = getelementptr inbounds float, ptr [[B]], i64 8
-; CHECK-NEXT: store float [[TMP4]], ptr [[ARRAYIDX1_I_I5]], align 4, !noalias !6
-; CHECK-NEXT: [[TMP5:%.*]] = load float, ptr [[C]], align 4, !noalias !6
+; CHECK-NEXT: store float [[TMP4]], ptr [[ARRAYIDX1_I_I5]], align 4, !noalias [[META6]]
+; CHECK-NEXT: [[TMP5:%.*]] = load float, ptr [[C]], align 4, !noalias [[META6]]
; CHECK-NEXT: [[ARRAYIDX_I6:%.*]] = getelementptr inbounds float, ptr [[A]], i64 7
-; CHECK-NEXT: store float [[TMP5]], ptr [[ARRAYIDX_I6]], align 4, !noalias !6
-; CHECK-NEXT: [[TMP6:%.*]] = load float, ptr [[A]], align 4, !alias.scope !6
+; CHECK-NEXT: store float [[TMP5]], ptr [[ARRAYIDX_I6]], align 4, !noalias [[META6]]
+; CHECK-NEXT: [[TMP6:%.*]] = load float, ptr [[A]], align 4, !alias.scope [[META6]]
; CHECK-NEXT: [[ARRAYIDX_I_I7:%.*]] = getelementptr inbounds float, ptr [[B]], i64 5
-; CHECK-NEXT: store float [[TMP6]], ptr [[ARRAYIDX_I_I7]], align 4, !alias.scope !6
+; CHECK-NEXT: store float [[TMP6]], ptr [[ARRAYIDX_I_I7]], align 4, !alias.scope [[META6]]
; CHECK-NEXT: [[ARRAYIDX1_I_I8:%.*]] = getelementptr inbounds float, ptr [[B]], i64 8
-; CHECK-NEXT: store float [[TMP6]], ptr [[ARRAYIDX1_I_I8]], align 4, !alias.scope !6
-; CHECK-NEXT: [[TMP7:%.*]] = load float, ptr [[A]], align 4, !alias.scope !6
+; CHECK-NEXT: store float [[TMP6]], ptr [[ARRAYIDX1_I_I8]], align 4, !alias.scope [[META6]]
+; CHECK-NEXT: [[TMP7:%.*]] = load float, ptr [[A]], align 4, !alias.scope [[META6]]
; CHECK-NEXT: [[ARRAYIDX_I9:%.*]] = getelementptr inbounds float, ptr [[B]], i64 7
-; CHECK-NEXT: store float [[TMP7]], ptr [[ARRAYIDX_I9]], align 4, !alias.scope !6
+; CHECK-NEXT: store float [[TMP7]], ptr [[ARRAYIDX_I9]], align 4, !alias.scope [[META6]]
; CHECK-NEXT: ret void
;
entry:
@@ -116,26 +116,26 @@ attributes #0 = { nounwind uwtable }
!0 = !{!1}
!1 = distinct !{!1, !2, !"hello: %a"}
-!2 = distinct !{!2, !"hello"}
+!2 = distinct !{!2, i1 false, !"hello"}
!3 = !{!4, !6}
!4 = distinct !{!4, !5, !"hello2: %a"}
-!5 = distinct !{!5, !"hello2"}
+!5 = distinct !{!5, i1 false, !"hello2"}
!6 = distinct !{!6, !5, !"hello2: %b"}
!7 = !{!4}
!8 = !{!6}
; CHECK: !0 = !{!1}
; CHECK: !1 = distinct !{!1, !2, !"hello2: %a"}
-; CHECK: !2 = distinct !{!2, !"hello2"}
+; CHECK: !2 = distinct !{!2, i1 false, !"hello2"}
; CHECK: !3 = !{!4}
; CHECK: !4 = distinct !{!4, !2, !"hello2: %b"}
; CHECK: !5 = !{!1, !4}
; CHECK: !6 = !{!7}
; CHECK: !7 = distinct !{!7, !8, !"hello: %a"}
-; CHECK: !8 = distinct !{!8, !"hello"}
+; CHECK: !8 = distinct !{!8, i1 false, !"hello"}
; CHECK: !9 = !{!10}
; CHECK: !10 = distinct !{!10, !11, !"hello2: %a"}
-; CHECK: !11 = distinct !{!11, !"hello2"}
+; CHECK: !11 = distinct !{!11, i1 false, !"hello2"}
; CHECK: !12 = !{!13}
; CHECK: !13 = distinct !{!13, !11, !"hello2: %b"}
; CHECK: !14 = !{!10, !13, !7}
@@ -143,7 +143,7 @@ attributes #0 = { nounwind uwtable }
; CHECK: !16 = !{!10, !7}
; CHECK: !17 = !{!18}
; CHECK: !18 = distinct !{!18, !19, !"hello2: %a"}
-; CHECK: !19 = distinct !{!19, !"hello2"}
+; CHECK: !19 = distinct !{!19, i1 false, !"hello2"}
; CHECK: !20 = !{!21}
; CHECK: !21 = distinct !{!21, !19, !"hello2: %b"}
; CHECK: !22 = !{!18, !21}
diff --git a/llvm/test/Transforms/Inline/noalias-escape-source.ll b/llvm/test/Transforms/Inline/noalias-escape-source.ll
index 09835cb75b7801..1a0900271d508e 100644
--- a/llvm/test/Transforms/Inline/noalias-escape-source.ll
+++ b/llvm/test/Transforms/Inline/noalias-escape-source.ll
@@ -93,11 +93,11 @@ define void @test_addr_only_capture(ptr %p) {
;.
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]], !"callee_no_capture: %p"}
-; CHECK: [[META2]] = distinct !{[[META2]], !"callee_no_capture"}
+; CHECK: [[META2]] = distinct !{[[META2]], i1 false, !"callee_no_capture"}
; CHECK: [[META3]] = !{[[META4:![0-9]+]]}
; CHECK: [[META4]] = distinct !{[[META4]], [[META5:![0-9]+]], !"callee_capture: %p"}
-; CHECK: [[META5]] = distinct !{[[META5]], !"callee_capture"}
+; CHECK: [[META5]] = distinct !{[[META5]], i1 false, !"callee_capture"}
; CHECK: [[META6]] = !{[[META7:![0-9]+]]}
; CHECK: [[META7]] = distinct !{[[META7]], [[META8:![0-9]+]], !"callee_addr_only_capture: %p"}
-; CHECK: [[META8]] = distinct !{[[META8]], !"callee_addr_only_capture"}
+; CHECK: [[META8]] = distinct !{[[META8]], i1 false, !"callee_addr_only_capture"}
;.
diff --git a/llvm/test/Transforms/Inline/noalias.ll b/llvm/test/Transforms/Inline/noalias.ll
index 974e87a53fd9a3..ef0e5fcf394cf3 100644
--- a/llvm/test/Transforms/Inline/noalias.ll
+++ b/llvm/test/Transforms/Inline/noalias.ll
@@ -69,10 +69,10 @@ attributes #0 = { nounwind uwtable }
; CHECK: !0 = !{!1}
; CHECK: !1 = distinct !{!1, !2, !"hello: %a"}
-; CHECK: !2 = distinct !{!2, !"hello"}
+; CHECK: !2 = distinct !{!2, i1 false, !"hello"}
; CHECK: !3 = !{!4}
; CHECK: !4 = distinct !{!4, !5, !"hello2: %a"}
-; CHECK: !5 = distinct !{!5, !"hello2"}
+; CHECK: !5 = distinct !{!5, i1 false, !"hello2"}
; CHECK: !6 = !{!7}
; CHECK: !7 = distinct !{!7, !5, !"hello2: %b"}
; CHECK: !8 = !{!4, !7}
diff --git a/llvm/test/Transforms/Inline/noalias2.ll b/llvm/test/Transforms/Inline/noalias2.ll
index fcf1e3870afd07..60b0dce2bcad5f 100644
--- a/llvm/test/Transforms/Inline/noalias2.ll
+++ b/llvm/test/Transforms/Inline/noalias2.ll
@@ -102,24 +102,24 @@ entry:
; CHECK: !0 = !{!1}
; CHECK: !1 = distinct !{!1, !2, !"hello: %a"}
-; CHECK: !2 = distinct !{!2, !"hello"}
+; CHECK: !2 = distinct !{!2, i1 false, !"hello"}
; CHECK: !3 = !{!4}
; CHECK: !4 = distinct !{!4, !2, !"hello: %c"}
; CHECK: !5 = !{!6}
; CHECK: !6 = distinct !{!6, !7, !"foo: %a"}
-; CHECK: !7 = distinct !{!7, !"foo"}
+; CHECK: !7 = distinct !{!7, i1 false, !"foo"}
; CHECK: !8 = !{!9}
; CHECK: !9 = distinct !{!9, !7, !"foo: %c"}
; CHECK: !10 = !{!11}
; CHECK: !11 = distinct !{!11, !12, !"hello: %a"}
-; CHECK: !12 = distinct !{!12, !"hello"}
+; CHECK: !12 = distinct !{!12, i1 false, !"hello"}
; CHECK: !13 = !{!14}
; CHECK: !14 = distinct !{!14, !12, !"hello: %c"}
; CHECK: !15 = !{!14, !9}
; CHECK: !16 = !{!11, !6}
; CHECK: !17 = !{!18}
; CHECK: !18 = distinct !{!18, !19, !"hello2: %a"}
-; CHECK: !19 = distinct !{!19, !"hello2"}
+; CHECK: !19 = distinct !{!19, i1 false, !"hello2"}
; CHECK: !20 = !{!21}
; CHECK: !21 = distinct !{!21, !19, !"hello2: %b"}
; CHECK: !22 = !{!18, !21}
diff --git a/llvm/test/Transforms/Inline/noalias3.ll b/llvm/test/Transforms/Inline/noalias3.ll
index b9054363fe08a1..6bea881539d803 100644
--- a/llvm/test/Transforms/Inline/noalias3.ll
+++ b/llvm/test/Transforms/Inline/noalias3.ll
@@ -32,4 +32,4 @@ dummy:
!0 = !{!1}
!1 = distinct !{!1, !2}
-!2 = distinct !{!2}
+!2 = distinct !{!2, i1 false}
diff --git a/llvm/test/Transforms/Inline/pr48209.ll b/llvm/test/Transforms/Inline/pr48209.ll
index 29813d18458c62..34bb285aa8cf8d 100644
--- a/llvm/test/Transforms/Inline/pr48209.ll
+++ b/llvm/test/Transforms/Inline/pr48209.ll
@@ -22,4 +22,4 @@ define void @test(ptr %p) {
!0 = !{!1}
!1 = distinct !{!1, !2}
-!2 = distinct !{!2}
+!2 = distinct !{!2, i1 false}
diff --git a/llvm/test/Transforms/Inline/pr50270.ll b/llvm/test/Transforms/Inline/pr50270.ll
index e1798f474b4ba2..071e53335add15 100644
--- a/llvm/test/Transforms/Inline/pr50270.ll
+++ b/llvm/test/Transforms/Inline/pr50270.ll
@@ -68,4 +68,4 @@ declare void @llvm.experimental.noalias.scope.decl(metadata)
!0 = !{!1}
!1 = !{!1, !2, !"scope"}
-!2 = !{!2, !"domain"}
+!2 = !{!2, i1 false, !"domain"}
diff --git a/llvm/test/Transforms/InstCombine/AMDGPU/memcpy-from-constant.ll b/llvm/test/Transforms/InstCombine/AMDGPU/memcpy-from-constant.ll
index 85868da11db35a..dd02c80fe849e2 100644
--- a/llvm/test/Transforms/InstCombine/AMDGPU/memcpy-from-constant.ll
+++ b/llvm/test/Transforms/InstCombine/AMDGPU/memcpy-from-constant.ll
@@ -235,4 +235,4 @@ attributes #1 = { nounwind readnone speculatable }
!0 = !{!1}
!1 = !{!1, !2}
-!2 = !{!2}
+!2 = !{!2, i1 false}
diff --git a/llvm/test/Transforms/InstCombine/bitcast-store.ll b/llvm/test/Transforms/InstCombine/bitcast-store.ll
index 3f5dac8bf0f458..c25f97d6580715 100644
--- a/llvm/test/Transforms/InstCombine/bitcast-store.ll
+++ b/llvm/test/Transforms/InstCombine/bitcast-store.ll
@@ -71,5 +71,5 @@ entry:
!0 = !{!1}
!1 = !{!1, !2}
-!2 = !{!2}
+!2 = !{!2, i1 false}
!3 = distinct !{}
diff --git a/llvm/test/Transforms/InstCombine/fold-phi-load-metadata.ll b/llvm/test/Transforms/InstCombine/fold-phi-load-metadata.ll
index dc399b67c4a174..598c64bfe04cb4 100644
--- a/llvm/test/Transforms/InstCombine/fold-phi-load-metadata.ll
+++ b/llvm/test/Transforms/InstCombine/fold-phi-load-metadata.ll
@@ -78,7 +78,7 @@ return: ; preds = %if.end, %if.then
!5 = !{!"omnipotent char", !6, i64 0}
!6 = !{!"Simple C/C++ TBAA"}
!7 = !{!"float", !5, i64 0}
-!8 = !{!8, !"some domain"}
+!8 = !{!8, i1 false, !"some domain"}
!9 = !{!9, !8, !"scope0"}
!10 = !{!10, !8, !"scope1"}
!11 = !{!11, !8, !"scope2"}
diff --git a/llvm/test/Transforms/InstCombine/load-combine-metadata.ll b/llvm/test/Transforms/InstCombine/load-combine-metadata.ll
index c456d0f5ed21bb..baeb925058e6fc 100644
--- a/llvm/test/Transforms/InstCombine/load-combine-metadata.ll
+++ b/llvm/test/Transforms/InstCombine/load-combine-metadata.ll
@@ -21,7 +21,7 @@ define void @test_load_load_combine_metadata(ptr, ptr, ptr) {
; CHECK: ![[RANGE]] = !{i32 0, i32 5}
!0 = !{ i32 0, i32 5 }
!1 = !{ i32 7, i32 9 }
-!2 = !{!2}
+!2 = !{!2, i1 false}
!3 = !{!3, !2}
!4 = !{!4, !2}
!5 = !{!3}
diff --git a/llvm/test/Transforms/InstCombine/loadstore-metadata.ll b/llvm/test/Transforms/InstCombine/loadstore-metadata.ll
index 3de4c2dd8df152..b50cdfc2072264 100644
--- a/llvm/test/Transforms/InstCombine/loadstore-metadata.ll
+++ b/llvm/test/Transforms/InstCombine/loadstore-metadata.ll
@@ -415,7 +415,7 @@ entry:
!2 = !{!"root"}
!3 = !{!4}
!4 = distinct !{!4, !5}
-!5 = distinct !{!5}
+!5 = distinct !{!5, i1 false}
!6 = !{i32 0, i32 42}
!7 = distinct !{}
!8 = !{i32 1}
@@ -426,7 +426,7 @@ entry:
!13 = distinct !{}
!14 = !{!15}
!15 = distinct !{!15, !16}
-!16 = distinct !{!16}
+!16 = distinct !{!16, i1 false}
!17 = !{ i32 0, !18 }
!18 = !{ !"nvvm.l1_eviction", !"first" }
@@ -436,7 +436,7 @@ entry:
; CHECK: [[META2]] = !{!"root"}
; CHECK: [[META3]] = !{[[META4:![0-9]+]]}
; CHECK: [[META4]] = distinct !{[[META4]], [[META5:![0-9]+]]}
-; CHECK: [[META5]] = distinct !{[[META5]]}
+; CHECK: [[META5]] = distinct !{[[META5]], i1 false}
; CHECK: [[META6]] = distinct !{}
; CHECK: [[META7]] = !{i32 1}
; CHECK: [[META8]] = !{i64 8}
@@ -446,7 +446,7 @@ entry:
; CHECK: [[RNG12]] = !{i32 0, i32 42}
; CHECK: [[META13]] = !{[[META14:![0-9]+]]}
; CHECK: [[META14]] = distinct !{[[META14]], [[META15:![0-9]+]]}
-; CHECK: [[META15]] = distinct !{[[META15]]}
+; CHECK: [[META15]] = distinct !{[[META15]], i1 false}
; CHECK: [[ACC_GRP16]] = distinct !{}
; CHECK: [[META17]] = !{i32 3}
; CHECK: [[META18]] = !{i32 0, [[META19:![0-9]+]]}
diff --git a/llvm/test/Transforms/InstCombine/memcpy-to-load.ll b/llvm/test/Transforms/InstCombine/memcpy-to-load.ll
index f8e8ab85f935af..d258e521d7c3d9 100644
--- a/llvm/test/Transforms/InstCombine/memcpy-to-load.ll
+++ b/llvm/test/Transforms/InstCombine/memcpy-to-load.ll
@@ -89,8 +89,8 @@ define void @copy_8_bytes_noalias(ptr %d, ptr %s) {
ret void
}
-!0 = distinct !{!0, !"The domain"}
-!1 = distinct !{!1}
+!0 = distinct !{!0, i1 false, !"The domain"}
+!1 = distinct !{!1, i1 false}
!2 = !{!2, !0}
!3 = !{!3, !1}
!4 = !{!2}
diff --git a/llvm/test/Transforms/InstCombine/noalias-scope-decl-disjoint-domain.ll b/llvm/test/Transforms/InstCombine/noalias-scope-decl-disjoint-domain.ll
new file mode 100644
index 00000000000000..20bd94bdf221f1
--- /dev/null
+++ b/llvm/test/Transforms/InstCombine/noalias-scope-decl-disjoint-domain.ll
@@ -0,0 +1,95 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
+; RUN: opt -passes=instcombine -S < %s | FileCheck %s
+
+define void @two_scopes_of_disjoint_domain_used_keep(ptr %ptr0, ptr %ptr1) {
+; CHECK-LABEL: define void @two_scopes_of_disjoint_domain_used_keep(
+; CHECK-SAME: ptr [[PTR0:%.*]], ptr [[PTR1:%.*]]) {
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META0:![0-9]+]])
+; CHECK-NEXT: store i8 42, ptr [[PTR0]], align 1, !alias.scope [[META0]]
+; CHECK-NEXT: store i8 43, ptr [[PTR1]], align 1, !alias.scope [[META3:![0-9]+]]
+; CHECK-NEXT: ret void
+;
+ call void @llvm.experimental.noalias.scope.decl(metadata !0)
+ store i8 42, ptr %ptr0, !alias.scope !0
+ store i8 43, ptr %ptr1, !alias.scope !3
+ ret void
+}
+
+define void @one_scope_of_disjoint_domain_used(ptr %ptr0) {
+; CHECK-LABEL: define void @one_scope_of_disjoint_domain_used(
+; CHECK-SAME: ptr [[PTR0:%.*]]) {
+; CHECK-NEXT: store i8 42, ptr [[PTR0]], align 1, !alias.scope [[META0]]
+; CHECK-NEXT: ret void
+;
+ call void @llvm.experimental.noalias.scope.decl(metadata !0)
+ store i8 42, ptr %ptr0, !alias.scope !0
+ ret void
+}
+
+define void @same_scope_of_disjoint_domain_twice(ptr %ptr0, ptr %ptr1) {
+; CHECK-LABEL: define void @same_scope_of_disjoint_domain_twice(
+; CHECK-SAME: ptr [[PTR0:%.*]], ptr [[PTR1:%.*]]) {
+; CHECK-NEXT: store i8 42, ptr [[PTR0]], align 1, !alias.scope [[META0]]
+; CHECK-NEXT: store i8 43, ptr [[PTR1]], align 1, !alias.scope [[META5:![0-9]+]]
+; CHECK-NEXT: ret void
+;
+ call void @llvm.experimental.noalias.scope.decl(metadata !0)
+ store i8 42, ptr %ptr0, !alias.scope !0
+ store i8 43, ptr %ptr1, !alias.scope !5
+ ret void
+}
+
+define void @declared_scope_of_disjoint_domain_unused(ptr %ptr0, ptr %ptr1) {
+; CHECK-LABEL: define void @declared_scope_of_disjoint_domain_unused(
+; CHECK-SAME: ptr [[PTR0:%.*]], ptr [[PTR1:%.*]]) {
+; CHECK-NEXT: store i8 42, ptr [[PTR0]], align 1, !alias.scope [[META0]]
+; CHECK-NEXT: store i8 43, ptr [[PTR1]], align 1, !alias.scope [[META3]]
+; CHECK-NEXT: ret void
+;
+ call void @llvm.experimental.noalias.scope.decl(metadata !8)
+ store i8 42, ptr %ptr0, !alias.scope !0
+ store i8 43, ptr %ptr1, !alias.scope !3
+ ret void
+}
+
+define void @two_scopes_of_plain_domain_used(ptr %ptr0, ptr %ptr1) {
+; CHECK-LABEL: define void @two_scopes_of_plain_domain_used(
+; CHECK-SAME: ptr [[PTR0:%.*]], ptr [[PTR1:%.*]]) {
+; CHECK-NEXT: store i8 42, ptr [[PTR0]], align 1, !alias.scope [[META8:![0-9]+]]
+; CHECK-NEXT: store i8 43, ptr [[PTR1]], align 1, !alias.scope [[META9:![0-9]+]]
+; CHECK-NEXT: ret void
+;
+ call void @llvm.experimental.noalias.scope.decl(metadata !10)
+ store i8 42, ptr %ptr0, !alias.scope !10
+ store i8 43, ptr %ptr1, !alias.scope !11
+ ret void
+}
+
+declare void @llvm.experimental.noalias.scope.decl(metadata)
+
+!0 = !{!1}
+!1 = distinct !{!1, !2}
+!2 = distinct !{!2, i1 true}
+!3 = !{!4}
+!4 = distinct !{!4, !2}
+!5 = !{!1, !6}
+!6 = distinct !{!6, !7}
+!7 = distinct !{!7, i1 false}
+!8 = !{!9}
+!9 = distinct !{!9, !2}
+!10 = !{!6}
+!11 = !{!12}
+!12 = distinct !{!12, !7}
+;.
+; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
+; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
+; CHECK: [[META2]] = distinct !{[[META2]], i1 true}
+; CHECK: [[META3]] = !{[[META4:![0-9]+]]}
+; CHECK: [[META4]] = distinct !{[[META4]], [[META2]]}
+; CHECK: [[META5]] = !{[[META1]], [[META6:![0-9]+]]}
+; CHECK: [[META6]] = distinct !{[[META6]], [[META7:![0-9]+]]}
+; CHECK: [[META7]] = distinct !{[[META7]], i1 false}
+; CHECK: [[META8]] = !{[[META6]]}
+; CHECK: [[META9]] = !{[[META10:![0-9]+]]}
+; CHECK: [[META10]] = distinct !{[[META10]], [[META7]]}
+;.
diff --git a/llvm/test/Transforms/InstCombine/noalias-scope-decl.ll b/llvm/test/Transforms/InstCombine/noalias-scope-decl.ll
index be3c33e528c542..078cfad85811a8 100644
--- a/llvm/test/Transforms/InstCombine/noalias-scope-decl.ll
+++ b/llvm/test/Transforms/InstCombine/noalias-scope-decl.ll
@@ -164,7 +164,7 @@ declare void @llvm.experimental.noalias.scope.decl(metadata)
!0 = !{ !1 }
!1 = distinct !{ !1, !2 }
-!2 = distinct !{ !2 }
+!2 = distinct !{!2, i1 false}
!3 = !{ !4 }
!4 = distinct !{ !4, !2 }
!5 = !{ !1, !4 }
diff --git a/llvm/test/Transforms/InstCombine/select-masked_load.ll b/llvm/test/Transforms/InstCombine/select-masked_load.ll
index f0c2e8c8845cf1..dd49fdeecbc510 100644
--- a/llvm/test/Transforms/InstCombine/select-masked_load.ll
+++ b/llvm/test/Transforms/InstCombine/select-masked_load.ll
@@ -214,7 +214,7 @@ define <8 x i16> @fold_sel_into_masked_load_drop_attrs(ptr %ptr, <8 x i1> %mask,
!2 = !{!"omnipotent char", !8, i64 0}
!3 = !{!4}
!4 = distinct !{!4, !5, !"scope"}
-!5 = distinct !{!5, !"domain"}
+!5 = distinct !{!5, i1 false, !"domain"}
!6 = !{!7}
!7 = distinct !{!7, !5, !"noscope"}
!8 = !{!"Simple C/C++ TBAA"}
diff --git a/llvm/test/Transforms/JumpThreading/free_instructions.ll b/llvm/test/Transforms/JumpThreading/free_instructions.ll
index 48bedc72c2d312..a1ebd0786b0c5b 100644
--- a/llvm/test/Transforms/JumpThreading/free_instructions.ll
+++ b/llvm/test/Transforms/JumpThreading/free_instructions.ll
@@ -57,4 +57,4 @@ declare ptr @llvm.launder.invariant.group.p0(ptr)
!0 = !{!1}
!1 = distinct !{!1, !2, !"scope"}
-!2 = distinct !{!2, !"domain"}
+!2 = distinct !{!2, i1 false, !"domain"}
diff --git a/llvm/test/Transforms/JumpThreading/noalias-scope-decl.ll b/llvm/test/Transforms/JumpThreading/noalias-scope-decl.ll
index b4979017b67e81..f5d83b83f87a50 100644
--- a/llvm/test/Transforms/JumpThreading/noalias-scope-decl.ll
+++ b/llvm/test/Transforms/JumpThreading/noalias-scope-decl.ll
@@ -98,24 +98,93 @@ fb:
ret void
}
+; Scopes of a domain with disjoint scopes have to be cloned into a clone of
+; that domain: the copies of a duplicated access are in the same memory region,
+; so they must not become implicitly noalias with each other.
+define void @clone_disjoint_domain(ptr %p) {
+; CHECK-LABEL: @clone_disjoint_domain(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[C:%.*]] = call i1 @opaque()
+; CHECK-NEXT: br i1 [[C]], label [[PRED:%.*]], label [[BB:%.*]]
+; CHECK: pred:
+; CHECK-NEXT: [[PV:%.*]] = call i1 @opaque()
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META9:![0-9]+]])
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META12:![0-9]+]])
+; CHECK-NEXT: store i8 0, ptr [[P:%.*]], align 1, !alias.scope [[META9]]
+; CHECK-NEXT: store i8 1, ptr [[P]], align 1, !alias.scope [[META12]]
+; CHECK-NEXT: br i1 [[PV]], label [[TB:%.*]], label [[FB:%.*]]
+; CHECK: bb:
+; CHECK-NEXT: [[OV:%.*]] = call i1 @opaque()
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META14:![0-9]+]])
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META17:![0-9]+]])
+; CHECK-NEXT: store i8 0, ptr [[P]], align 1, !alias.scope [[META14]]
+; CHECK-NEXT: store i8 1, ptr [[P]], align 1, !alias.scope [[META17]]
+; CHECK-NEXT: br i1 [[OV]], label [[TB]], label [[FB]]
+; CHECK: tb:
+; CHECK-NEXT: ret void
+; CHECK: fb:
+; CHECK-NEXT: ret void
+;
+entry:
+ %c = call i1 @opaque()
+ br i1 %c, label %pred, label %other
+
+pred:
+ %pv = call i1 @opaque()
+ br label %bb
+
+other:
+ %ov = call i1 @opaque()
+ br label %bb
+
+bb:
+ %x = phi i1 [ %pv, %pred ], [ %ov, %other ]
+ call void @llvm.experimental.noalias.scope.decl(metadata !5)
+ call void @llvm.experimental.noalias.scope.decl(metadata !7)
+ store i8 0, ptr %p, !alias.scope !5
+ store i8 1, ptr %p, !alias.scope !7
+ br i1 %x, label %tb, label %fb
+
+tb:
+ ret void
+
+fb:
+ ret void
+}
+
declare i1 @opaque()
declare void @llvm.experimental.noalias.scope.decl(metadata)
!0 = !{!1}
!1 = distinct !{!1, !2, !"scope1"}
-!2 = distinct !{!2, !"domain"}
+!2 = distinct !{!2, i1 false, !"domain"}
!3 = !{!4}
!4 = distinct !{!4, !2, !"scope2"}
+!5 = !{!6}
+!6 = distinct !{!6, !8, !"disjoint scope1"}
+!7 = !{!9}
+!8 = distinct !{!8, i1 true, !"disjoint domain"}
+!9 = distinct !{!9, !8, !"disjoint scope2"}
;.
; CHECK: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
;.
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]], !"scope1"}
-; CHECK: [[META2]] = distinct !{[[META2]], !"domain"}
+; CHECK: [[META2]] = distinct !{[[META2]], i1 false, !"domain"}
; CHECK: [[META3]] = !{[[META4:![0-9]+]]}
; CHECK: [[META4]] = distinct !{[[META4]], [[META2]], !"scope2"}
; CHECK: [[META5]] = !{[[META6:![0-9]+]]}
; CHECK: [[META6]] = distinct !{[[META6]], [[META2]], !"scope2:thread"}
; CHECK: [[META7]] = !{[[META8:![0-9]+]]}
; CHECK: [[META8]] = distinct !{[[META8]], [[META2]], !"scope1:thread"}
+; CHECK: [[META9]] = !{[[META10:![0-9]+]]}
+; CHECK: [[META10]] = distinct !{[[META10]], [[META11:![0-9]+]], !"disjoint scope1:thread"}
+; CHECK: [[META11]] = distinct !{[[META11]], i1 true, !"disjoint domain"}
+; CHECK: [[META12]] = !{[[META13:![0-9]+]]}
+; CHECK: [[META13]] = distinct !{[[META13]], [[META11]], !"disjoint scope2:thread"}
+; CHECK: [[META14]] = !{[[META15:![0-9]+]]}
+; CHECK: [[META15]] = distinct !{[[META15]], [[META16:![0-9]+]], !"disjoint scope1"}
+; CHECK: [[META16]] = distinct !{[[META16]], i1 true, !"disjoint domain"}
+; CHECK: [[META17]] = !{[[META18:![0-9]+]]}
+; CHECK: [[META18]] = distinct !{[[META18]], [[META16]], !"disjoint scope2"}
;.
diff --git a/llvm/test/Transforms/JumpThreading/thread-loads.ll b/llvm/test/Transforms/JumpThreading/thread-loads.ll
index cb10168547d2a7..712a3090e182c8 100644
--- a/llvm/test/Transforms/JumpThreading/thread-loads.ll
+++ b/llvm/test/Transforms/JumpThreading/thread-loads.ll
@@ -463,7 +463,7 @@ define fastcc i32 @Search(i64 %idxprom.i, i64 %idxprom.i89, i32 %c) {
; CHECK-NEXT: [[ARRAYIDX185:%.*]] = getelementptr inbounds [65 x i32], ptr @hash_move, i64 0, i64 [[IDXPROM_I]]
; CHECK-NEXT: [[ARRAYIDX307:%.*]] = getelementptr inbounds [65 x i32], ptr @current_move, i64 0, i64 [[IDXPROM_I]]
; CHECK-NEXT: [[ARRAYIDX89:%.*]] = getelementptr inbounds [65 x ptr], ptr @last, i64 0, i64 [[IDXPROM_I]]
-; CHECK-NEXT: [[PHASE:%.*]] = getelementptr inbounds [65 x %struct.NEXT_MOVE], ptr @next_status, i64 0, i64 [[IDXPROM_I]], i32 0
+; CHECK-NEXT: [[PHASE:%.*]] = getelementptr inbounds [65 x [[STRUCT_NEXT_MOVE:%.*]]], ptr @next_status, i64 0, i64 [[IDXPROM_I]], i32 0
; CHECK-NEXT: switch i32 [[C]], label %[[CLEANUP:.*]] [
; CHECK-NEXT: i32 1, label %[[SW_BB_I:.*]]
; CHECK-NEXT: i32 0, label %[[SW_BB21_I:.*]]
@@ -700,7 +700,7 @@ right_x:
!3 = !{!"int", !1}
!4 = !{ i32 0, i32 1 }
!5 = !{ i32 8, i32 10 }
-!6 = !{!6}
+!6 = !{!6, i1 false}
!7 = !{!7, !6}
!8 = !{!8, !6}
!9 = !{!7}
@@ -714,7 +714,7 @@ right_x:
; CHECK: [[RNG4]] = !{i32 0, i32 1}
; CHECK: [[META5]] = !{[[META6:![0-9]+]]}
; CHECK: [[META6]] = distinct !{[[META6]], [[META7:![0-9]+]]}
-; CHECK: [[META7]] = distinct !{[[META7]]}
+; CHECK: [[META7]] = distinct !{[[META7]], i1 false}
; CHECK: [[META8]] = !{[[META9:![0-9]+]]}
; CHECK: [[META9]] = distinct !{[[META9]], [[META7]]}
; CHECK: [[META10]] = !{}
diff --git a/llvm/test/Transforms/LICM/AMDGPU/buffer-rsrc-ptrs.ll b/llvm/test/Transforms/LICM/AMDGPU/buffer-rsrc-ptrs.ll
index a3dfa911953434..cb3e4589b1e9db 100644
--- a/llvm/test/Transforms/LICM/AMDGPU/buffer-rsrc-ptrs.ll
+++ b/llvm/test/Transforms/LICM/AMDGPU/buffer-rsrc-ptrs.ll
@@ -104,7 +104,7 @@ loop:
tail:
ret void
}
-!0 = !{!0, !"hoisting"}
+!0 = !{!0, i1 false, !"hoisting"}
!1 = !{!1, !0, !"p"}
!2 = !{!2, !0, !"q"}
diff --git a/llvm/test/Transforms/LICM/dropped-tbaa.ll b/llvm/test/Transforms/LICM/dropped-tbaa.ll
index 92839f1d19968d..6cfcc8a4ff9580 100644
--- a/llvm/test/Transforms/LICM/dropped-tbaa.ll
+++ b/llvm/test/Transforms/LICM/dropped-tbaa.ll
@@ -83,6 +83,6 @@ attributes #0 = { argmemonly nounwind }
!6 = !{!"double", !3, i64 0}
!7 = !{!8}
!8 = distinct !{!8, !9, !"add: %addend"}
-!9 = distinct !{!9, !"add"}
+!9 = distinct !{!9, i1 false, !"add"}
!10 = !{!11}
!11 = distinct !{!11, !9, !"add: %data"}
diff --git a/llvm/test/Transforms/LICM/hoist-metadata.ll b/llvm/test/Transforms/LICM/hoist-metadata.ll
index f25cb966a37fc7..efe5d74650f4b2 100644
--- a/llvm/test/Transforms/LICM/hoist-metadata.ll
+++ b/llvm/test/Transforms/LICM/hoist-metadata.ll
@@ -125,7 +125,7 @@ exit:
!3 = !{!"Simple C/C++ TBAA"}
!4 = !{!5}
!5 = distinct !{!5, !6}
-!6 = distinct !{!6}
+!6 = distinct !{!6, i1 false}
;.
; CHECK: attributes #[[ATTR0:[0-9]+]] = { memory(none) }
;.
diff --git a/llvm/test/Transforms/LICM/licm-ci.ll b/llvm/test/Transforms/LICM/licm-ci.ll
index b818442f994fcf..a4b87a2da5e465 100644
--- a/llvm/test/Transforms/LICM/licm-ci.ll
+++ b/llvm/test/Transforms/LICM/licm-ci.ll
@@ -33,6 +33,6 @@ exit: ; preds = %loop
ret i16 %reduce
}
-!0 = !{!0}
+!0 = !{!0, i1 false}
!1 = !{!1, !0}
!2 = !{!1}
diff --git a/llvm/test/Transforms/LICM/pr42969.ll b/llvm/test/Transforms/LICM/pr42969.ll
index ba02fbb72e7105..72f796957c6640 100644
--- a/llvm/test/Transforms/LICM/pr42969.ll
+++ b/llvm/test/Transforms/LICM/pr42969.ll
@@ -62,7 +62,7 @@ exit.block: ; preds = %scalar.cleanup
!0 = !{!1}
!1 = distinct !{!1, !2}
-!2 = distinct !{!2, !"LVerDomain"}
+!2 = distinct !{!2, i1 false, !"LVerDomain"}
!3 = !{!4}
!4 = distinct !{!4, !2}
!5 = !{!"Simple C++ TBAA"}
diff --git a/llvm/test/Transforms/LICM/scalar-promote.ll b/llvm/test/Transforms/LICM/scalar-promote.ll
index be57f3072c6b92..94fe6cdd91ab06 100644
--- a/llvm/test/Transforms/LICM/scalar-promote.ll
+++ b/llvm/test/Transforms/LICM/scalar-promote.ll
@@ -1023,7 +1023,7 @@ exit:
!3 = !{!5, !5, i64 0}
!4 = !{!"int", !1}
!5 = !{!"float", !1}
-!6 = !{!6}
+!6 = !{!6, i1 false}
!7 = !{!7, !6}
!8 = !{!7}
@@ -1037,5 +1037,5 @@ exit:
; CHECK: [[META5]] = !{!"float", [[META2]]}
; CHECK: [[META6]] = !{[[META7:![0-9]+]]}
; CHECK: [[META7]] = distinct !{[[META7]], [[META8:![0-9]+]]}
-; CHECK: [[META8]] = distinct !{[[META8]]}
+; CHECK: [[META8]] = distinct !{[[META8]], i1 false}
;.
diff --git a/llvm/test/Transforms/LoadStoreVectorizer/AMDGPU/aa-metadata.ll b/llvm/test/Transforms/LoadStoreVectorizer/AMDGPU/aa-metadata.ll
index 354537acf12185..473082c83f46a1 100644
--- a/llvm/test/Transforms/LoadStoreVectorizer/AMDGPU/aa-metadata.ll
+++ b/llvm/test/Transforms/LoadStoreVectorizer/AMDGPU/aa-metadata.ll
@@ -34,4 +34,4 @@ attributes #0 = { nounwind }
!0 = !{!1}
!1 = distinct !{!1, !2, !"some scope"}
-!2 = distinct !{!2, !"some domain"}
+!2 = distinct !{!2, i1 false, !"some domain"}
diff --git a/llvm/test/Transforms/LoadStoreVectorizer/AMDGPU/fence-noalias-metadata.ll b/llvm/test/Transforms/LoadStoreVectorizer/AMDGPU/fence-noalias-metadata.ll
index 5a73e7b31ca54c..1c58c13408f456 100644
--- a/llvm/test/Transforms/LoadStoreVectorizer/AMDGPU/fence-noalias-metadata.ll
+++ b/llvm/test/Transforms/LoadStoreVectorizer/AMDGPU/fence-noalias-metadata.ll
@@ -110,7 +110,7 @@ declare void @use(i32)
; Metadata: three noalias scopes in the same domain.
!0 = !{!1}
!1 = distinct !{!1, !2, !"arg_scope"}
-!2 = distinct !{!2, !"kernel_domain"}
+!2 = distinct !{!2, i1 false, !"kernel_domain"}
!3 = !{!4}
!4 = distinct !{!4, !2, !"other_arg_scope"}
!5 = !{!1, !4}
@@ -119,7 +119,7 @@ declare void @use(i32)
;.
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]], !"arg_scope"}
-; CHECK: [[META2]] = distinct !{[[META2]], !"kernel_domain"}
+; CHECK: [[META2]] = distinct !{[[META2]], i1 false, !"kernel_domain"}
; CHECK: [[META3]] = !{[[META4:![0-9]+]]}
; CHECK: [[META4]] = distinct !{[[META4]], [[META2]], !"other_arg_scope"}
; CHECK: [[META5]] = !{[[META1]], [[META4]]}
diff --git a/llvm/test/Transforms/LoopDeletion/noalias.ll b/llvm/test/Transforms/LoopDeletion/noalias.ll
index 0f3b71df942708..8b8dfa0f48daf3 100644
--- a/llvm/test/Transforms/LoopDeletion/noalias.ll
+++ b/llvm/test/Transforms/LoopDeletion/noalias.ll
@@ -25,4 +25,4 @@ for.body:
!0 = !{!1}
!1 = distinct !{!1, !2, !"x: %a"}
-!2 = distinct !{!2, !"x"}
+!2 = distinct !{!2, i1 false, !"x"}
diff --git a/llvm/test/Transforms/LoopDistribute/bounds-expansion-bug.ll b/llvm/test/Transforms/LoopDistribute/bounds-expansion-bug.ll
index d867a574110b23..16c5fbe3dbcf30 100644
--- a/llvm/test/Transforms/LoopDistribute/bounds-expansion-bug.ll
+++ b/llvm/test/Transforms/LoopDistribute/bounds-expansion-bug.ll
@@ -185,7 +185,7 @@ for.end: ; preds = %for.body
; CHECK: [[META1]] = !{!"llvm.loop.isdistributed", i32 1}
; CHECK: [[META2]] = !{[[META3:![0-9]+]]}
; CHECK: [[META3]] = distinct !{[[META3]], [[META4:![0-9]+]]}
-; CHECK: [[META4]] = distinct !{[[META4]], !"LVerDomain"}
+; CHECK: [[META4]] = distinct !{[[META4]], i1 false, !"LVerDomain"}
; CHECK: [[META5]] = !{[[META6:![0-9]+]], [[META7:![0-9]+]], [[META8:![0-9]+]]}
; CHECK: [[META6]] = distinct !{[[META6]], [[META4]]}
; CHECK: [[META7]] = distinct !{[[META7]], [[META4]]}
diff --git a/llvm/test/Transforms/LoopDistribute/cross-partition-access.ll b/llvm/test/Transforms/LoopDistribute/cross-partition-access.ll
index f9c1b365a6b2b2..da7613be312474 100644
--- a/llvm/test/Transforms/LoopDistribute/cross-partition-access.ll
+++ b/llvm/test/Transforms/LoopDistribute/cross-partition-access.ll
@@ -148,7 +148,7 @@ end: ; preds = %end.loopexit, %entr
; CHECK: [[META6]] = !{!"llvm.loop.isdistributed", i32 1}
; CHECK: [[META7]] = !{[[META8:![0-9]+]]}
; CHECK: [[META8]] = distinct !{[[META8]], [[META9:![0-9]+]]}
-; CHECK: [[META9]] = distinct !{[[META9]], !"LVerDomain"}
+; CHECK: [[META9]] = distinct !{[[META9]], i1 false, !"LVerDomain"}
; CHECK: [[META10]] = !{[[META11:![0-9]+]]}
; CHECK: [[META11]] = distinct !{[[META11]], [[META9]]}
; CHECK: [[META12]] = !{[[META13:![0-9]+]], [[META14:![0-9]+]], [[META8]]}
diff --git a/llvm/test/Transforms/LoopDistribute/followup.ll b/llvm/test/Transforms/LoopDistribute/followup.ll
index 2753bad5e1c1eb..091e1c4b7a1770 100644
--- a/llvm/test/Transforms/LoopDistribute/followup.ll
+++ b/llvm/test/Transforms/LoopDistribute/followup.ll
@@ -137,7 +137,7 @@ for.end:
; CHECK: [[META3]] = !{!"llvm.loop.isdistributed", i32 1}
; CHECK: [[META4]] = !{[[META5:![0-9]+]]}
; CHECK: [[META5]] = distinct !{[[META5]], [[META6:![0-9]+]]}
-; CHECK: [[META6]] = distinct !{[[META6]], !"LVerDomain"}
+; CHECK: [[META6]] = distinct !{[[META6]], i1 false, !"LVerDomain"}
; CHECK: [[META7]] = !{[[META8:![0-9]+]], [[META9:![0-9]+]], [[META10:![0-9]+]]}
; CHECK: [[META8]] = distinct !{[[META8]], [[META6]]}
; CHECK: [[META9]] = distinct !{[[META9]], [[META6]]}
diff --git a/llvm/test/Transforms/LoopDistribute/no-reprocess.ll b/llvm/test/Transforms/LoopDistribute/no-reprocess.ll
index 2dbc77aa756f64..7043eeabe12683 100644
--- a/llvm/test/Transforms/LoopDistribute/no-reprocess.ll
+++ b/llvm/test/Transforms/LoopDistribute/no-reprocess.ll
@@ -119,7 +119,7 @@ end: ; preds = %end.loopexit, %entr
!6 = !{!"llvm.loop.isdistributed", i32 1}
!7 = !{!8}
!8 = distinct !{!8, !9}
-!9 = distinct !{!9, !"LVerDomain"}
+!9 = distinct !{!9, i1 false, !"LVerDomain"}
!10 = !{!11}
!11 = distinct !{!11, !9}
!12 = !{!13, !14, !8}
diff --git a/llvm/test/Transforms/LoopDistribute/non-lcssa-input.ll b/llvm/test/Transforms/LoopDistribute/non-lcssa-input.ll
index 731a2e055e4dc2..c88d1e5d6d3482 100644
--- a/llvm/test/Transforms/LoopDistribute/non-lcssa-input.ll
+++ b/llvm/test/Transforms/LoopDistribute/non-lcssa-input.ll
@@ -224,7 +224,7 @@ outer.exit:
; CHECK: [[META1]] = !{!"llvm.loop.isdistributed", i32 1}
; CHECK: [[META2]] = !{[[META3:![0-9]+]]}
; CHECK: [[META3]] = distinct !{[[META3]], [[META4:![0-9]+]]}
-; CHECK: [[META4]] = distinct !{[[META4]], !"LVerDomain"}
+; CHECK: [[META4]] = distinct !{[[META4]], i1 false, !"LVerDomain"}
; CHECK: [[META5]] = !{[[META6:![0-9]+]]}
; CHECK: [[META6]] = distinct !{[[META6]], [[META4]]}
; CHECK: [[META7]] = !{[[META8:![0-9]+]]}
@@ -232,7 +232,7 @@ outer.exit:
; CHECK: [[LOOP9]] = distinct !{[[LOOP9]], [[META1]]}
; CHECK: [[META10]] = !{[[META11:![0-9]+]]}
; CHECK: [[META11]] = distinct !{[[META11]], [[META12:![0-9]+]]}
-; CHECK: [[META12]] = distinct !{[[META12]], !"LVerDomain"}
+; CHECK: [[META12]] = distinct !{[[META12]], i1 false, !"LVerDomain"}
; CHECK: [[META13]] = !{[[META14:![0-9]+]]}
; CHECK: [[META14]] = distinct !{[[META14]], [[META12]]}
; CHECK: [[META15]] = !{[[META16:![0-9]+]]}
diff --git a/llvm/test/Transforms/LoopDistribute/outside-use.ll b/llvm/test/Transforms/LoopDistribute/outside-use.ll
index 661f8062ae268e..f9ed2170d16526 100644
--- a/llvm/test/Transforms/LoopDistribute/outside-use.ll
+++ b/llvm/test/Transforms/LoopDistribute/outside-use.ll
@@ -52,19 +52,19 @@ define void @f() {
; CHECK-NEXT: [[LOADC_LVER_ORIG:%.*]] = load i32, ptr [[ARRAYIDXC_LVER_ORIG]], align 4
; CHECK-NEXT: [[SUM_ADD_LVER_ORIG]] = add nuw nsw i32 [[SUM_LVER_ORIG]], [[LOADC_LVER_ORIG]]
; CHECK-NEXT: [[EXITCOND_LVER_ORIG:%.*]] = icmp eq i64 [[ADD_LVER_ORIG]], 20
-; CHECK-NEXT: br i1 [[EXITCOND_LVER_ORIG]], label %[[FOR_END_LOOPEXIT:.*]], label %[[FOR_BODY_LVER_ORIG]]
+; CHECK-NEXT: br i1 [[EXITCOND_LVER_ORIG]], label %[[FOR_END_LOOPEXIT:.*]], label %[[FOR_BODY_LVER_ORIG]], !llvm.loop [[LOOP0:![0-9]+]]
; CHECK: [[FOR_BODY_PH_LDIST1]]:
; CHECK-NEXT: br label %[[FOR_BODY_LDIST1:.*]]
; CHECK: [[FOR_BODY_LDIST1]]:
; CHECK-NEXT: [[IND_LDIST1:%.*]] = phi i64 [ 0, %[[FOR_BODY_PH_LDIST1]] ], [ [[ADD_LDIST1:%.*]], %[[FOR_BODY_LDIST1]] ]
; CHECK-NEXT: [[ARRAYIDXA_LDIST1:%.*]] = getelementptr inbounds i32, ptr [[A]], i64 [[IND_LDIST1]]
-; CHECK-NEXT: [[LOADA_LDIST1:%.*]] = load i32, ptr [[ARRAYIDXA_LDIST1]], align 4, !alias.scope [[META0:![0-9]+]], !noalias [[META3:![0-9]+]]
+; CHECK-NEXT: [[LOADA_LDIST1:%.*]] = load i32, ptr [[ARRAYIDXA_LDIST1]], align 4, !alias.scope [[META2:![0-9]+]], !noalias [[META5:![0-9]+]]
; CHECK-NEXT: [[ARRAYIDXB_LDIST1:%.*]] = getelementptr inbounds i32, ptr [[B]], i64 [[IND_LDIST1]]
-; CHECK-NEXT: [[LOADB_LDIST1:%.*]] = load i32, ptr [[ARRAYIDXB_LDIST1]], align 4, !alias.scope [[META5:![0-9]+]]
+; CHECK-NEXT: [[LOADB_LDIST1:%.*]] = load i32, ptr [[ARRAYIDXB_LDIST1]], align 4, !alias.scope [[META7:![0-9]+]]
; CHECK-NEXT: [[MULA_LDIST1:%.*]] = mul i32 [[LOADB_LDIST1]], [[LOADA_LDIST1]]
; CHECK-NEXT: [[ADD_LDIST1]] = add nuw nsw i64 [[IND_LDIST1]], 1
; CHECK-NEXT: [[ARRAYIDXA_PLUS_4_LDIST1:%.*]] = getelementptr inbounds i32, ptr [[A]], i64 [[ADD_LDIST1]]
-; CHECK-NEXT: store i32 [[MULA_LDIST1]], ptr [[ARRAYIDXA_PLUS_4_LDIST1]], align 4, !alias.scope [[META0]], !noalias [[META3]]
+; CHECK-NEXT: store i32 [[MULA_LDIST1]], ptr [[ARRAYIDXA_PLUS_4_LDIST1]], align 4, !alias.scope [[META2]], !noalias [[META5]]
; CHECK-NEXT: [[EXITCOND_LDIST1:%.*]] = icmp eq i64 [[ADD_LDIST1]], 20
; CHECK-NEXT: br i1 [[EXITCOND_LDIST1]], label %[[FOR_BODY_PH:.*]], label %[[FOR_BODY_LDIST1]]
; CHECK: [[FOR_BODY_PH]]:
@@ -74,18 +74,18 @@ define void @f() {
; CHECK-NEXT: [[SUM:%.*]] = phi i32 [ 0, %[[FOR_BODY_PH]] ], [ [[SUM_ADD:%.*]], %[[FOR_BODY]] ]
; CHECK-NEXT: [[ADD]] = add nuw nsw i64 [[IND]], 1
; CHECK-NEXT: [[ARRAYIDXC:%.*]] = getelementptr inbounds i32, ptr [[C]], i64 [[IND]]
-; CHECK-NEXT: [[LOADC:%.*]] = load i32, ptr [[ARRAYIDXC]], align 4, !alias.scope [[META3]]
+; CHECK-NEXT: [[LOADC:%.*]] = load i32, ptr [[ARRAYIDXC]], align 4, !alias.scope [[META5]]
; CHECK-NEXT: [[SUM_ADD]] = add nuw nsw i32 [[SUM]], [[LOADC]]
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i64 [[ADD]], 20
; CHECK-NEXT: br i1 [[EXITCOND]], label %[[FOR_END_LOOPEXIT2:.*]], label %[[FOR_BODY]]
; CHECK: [[FOR_END_LOOPEXIT]]:
-; CHECK-NEXT: [[SUM_ADD_LVER_PH:%.*]] = phi i32 [ [[SUM_ADD_LVER_ORIG]], %[[FOR_BODY_LVER_ORIG]] ]
+; CHECK-NEXT: [[SUM_ADD_LCSSA_PH:%.*]] = phi i32 [ [[SUM_ADD_LVER_ORIG]], %[[FOR_BODY_LVER_ORIG]] ]
; CHECK-NEXT: br label %[[FOR_END:.*]]
; CHECK: [[FOR_END_LOOPEXIT2]]:
-; CHECK-NEXT: [[SUM_ADD_LVER_PH3:%.*]] = phi i32 [ [[SUM_ADD]], %[[FOR_BODY]] ]
+; CHECK-NEXT: [[SUM_ADD_LCSSA_PH3:%.*]] = phi i32 [ [[SUM_ADD]], %[[FOR_BODY]] ]
; CHECK-NEXT: br label %[[FOR_END]]
; CHECK: [[FOR_END]]:
-; CHECK-NEXT: [[SUM_ADD_LVER:%.*]] = phi i32 [ [[SUM_ADD_LVER_PH]], %[[FOR_END_LOOPEXIT]] ], [ [[SUM_ADD_LVER_PH3]], %[[FOR_END_LOOPEXIT2]] ]
+; CHECK-NEXT: [[SUM_ADD_LVER:%.*]] = phi i32 [ [[SUM_ADD_LCSSA_PH]], %[[FOR_END_LOOPEXIT]] ], [ [[SUM_ADD_LCSSA_PH3]], %[[FOR_END_LOOPEXIT2]] ]
; CHECK-NEXT: store i32 [[SUM_ADD_LVER]], ptr @SUM, align 4
; CHECK-NEXT: ret void
;
@@ -127,11 +127,13 @@ for.end: ; preds = %for.body
ret void
}
;.
-; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
-; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
-; CHECK: [[META2]] = distinct !{[[META2]], !"LVerDomain"}
-; CHECK: [[META3]] = !{[[META4:![0-9]+]]}
-; CHECK: [[META4]] = distinct !{[[META4]], [[META2]]}
+; CHECK: [[LOOP0]] = distinct !{[[LOOP0]], [[META1:![0-9]+]]}
+; CHECK: [[META1]] = !{!"llvm.loop.isdistributed", i32 1}
+; CHECK: [[META2]] = !{[[META3:![0-9]+]]}
+; CHECK: [[META3]] = distinct !{[[META3]], [[META4:![0-9]+]]}
+; CHECK: [[META4]] = distinct !{[[META4]], i1 false, !"LVerDomain"}
; CHECK: [[META5]] = !{[[META6:![0-9]+]]}
-; CHECK: [[META6]] = distinct !{[[META6]], [[META2]]}
+; CHECK: [[META6]] = distinct !{[[META6]], [[META4]]}
+; CHECK: [[META7]] = !{[[META8:![0-9]+]]}
+; CHECK: [[META8]] = distinct !{[[META8]], [[META4]]}
;.
diff --git a/llvm/test/Transforms/LoopRotate/noalias.ll b/llvm/test/Transforms/LoopRotate/noalias.ll
index d6b2414b426d8e..e765ff71aa2a3c 100644
--- a/llvm/test/Transforms/LoopRotate/noalias.ll
+++ b/llvm/test/Transforms/LoopRotate/noalias.ll
@@ -155,13 +155,13 @@ declare void @llvm.experimental.noalias.scope.decl(metadata)
!1 = !{!"clang"}
!2 = !{!3}
!3 = distinct !{!3, !4, !"test_loop_rotate_XX: pA"}
-!4 = distinct !{!4, !"test_loop_rotate_XX"}
+!4 = distinct !{!4, i1 false, !"test_loop_rotate_XX"}
; CHECK: !0 = !{i32 1, !"wchar_size", i32 4}
; CHECK: !1 = !{!"clang"}
; CHECK: !2 = !{!3}
; CHECK: !3 = distinct !{!3, !4, !"test_loop_rotate_XX: pA:pre.rot"}
-; CHECK: !4 = distinct !{!4, !"test_loop_rotate_XX"}
+; CHECK: !4 = distinct !{!4, i1 false, !"test_loop_rotate_XX"}
; CHECK: !5 = !{!6}
; CHECK: !6 = distinct !{!6, !4, !"test_loop_rotate_XX: pA"}
; CHECK: !7 = !{!8}
diff --git a/llvm/test/Transforms/LoopUnroll/noalias.ll b/llvm/test/Transforms/LoopUnroll/noalias.ll
index 4d2ed1d17fde05..9bab8fcd46e54d 100644
--- a/llvm/test/Transforms/LoopUnroll/noalias.ll
+++ b/llvm/test/Transforms/LoopUnroll/noalias.ll
@@ -6,22 +6,22 @@ define void @test_inside(ptr %addr1, ptr %addr2) {
; CHECK-NEXT: start:
; CHECK-NEXT: br label [[BODY:%.*]]
; CHECK: body:
-; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !0)
-; CHECK-NEXT: [[X:%.*]] = load i32, ptr [[ADDR1:%.*]], align 4, !alias.scope !0
-; CHECK-NEXT: store i32 [[X]], ptr [[ADDR2:%.*]], align 4, !noalias !0
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META0:![0-9]+]])
+; CHECK-NEXT: [[X:%.*]] = load i32, ptr [[ADDR1:%.*]], align 4, !alias.scope [[META0]]
+; CHECK-NEXT: store i32 [[X]], ptr [[ADDR2:%.*]], align 4, !noalias [[META0]]
; CHECK-NEXT: [[ADDR1I_1:%.*]] = getelementptr inbounds i32, ptr [[ADDR1]], i32 1
; CHECK-NEXT: [[ADDR2I_1:%.*]] = getelementptr inbounds i32, ptr [[ADDR2]], i32 1
-; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !3)
-; CHECK-NEXT: [[X_1:%.*]] = load i32, ptr [[ADDR1I_1]], align 4, !alias.scope !3
-; CHECK-NEXT: store i32 [[X_1]], ptr [[ADDR2I_1]], align 4, !noalias !3
-; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !5)
-; CHECK-NEXT: [[X_2:%.*]] = load i32, ptr [[ADDR1]], align 4, !alias.scope !5
-; CHECK-NEXT: store i32 [[X_2]], ptr [[ADDR2]], align 4, !noalias !5
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META3:![0-9]+]])
+; CHECK-NEXT: [[X_1:%.*]] = load i32, ptr [[ADDR1I_1]], align 4, !alias.scope [[META3]]
+; CHECK-NEXT: store i32 [[X_1]], ptr [[ADDR2I_1]], align 4, !noalias [[META3]]
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META5:![0-9]+]])
+; CHECK-NEXT: [[X_2:%.*]] = load i32, ptr [[ADDR1]], align 4, !alias.scope [[META5]]
+; CHECK-NEXT: store i32 [[X_2]], ptr [[ADDR2]], align 4, !noalias [[META5]]
; CHECK-NEXT: [[ADDR1I_3:%.*]] = getelementptr inbounds i32, ptr [[ADDR1]], i32 1
; CHECK-NEXT: [[ADDR2I_3:%.*]] = getelementptr inbounds i32, ptr [[ADDR2]], i32 1
-; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !7)
-; CHECK-NEXT: [[X_3:%.*]] = load i32, ptr [[ADDR1I_3]], align 4, !alias.scope !7
-; CHECK-NEXT: store i32 [[X_3]], ptr [[ADDR2I_3]], align 4, !noalias !7
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META7:![0-9]+]])
+; CHECK-NEXT: [[X_3:%.*]] = load i32, ptr [[ADDR1I_3]], align 4, !alias.scope [[META7]]
+; CHECK-NEXT: store i32 [[X_3]], ptr [[ADDR2I_3]], align 4, !noalias [[META7]]
; CHECK-NEXT: ret void
;
start:
@@ -48,21 +48,21 @@ end:
define void @test_outside(ptr %addr1, ptr %addr2) {
; CHECK-LABEL: @test_outside(
; CHECK-NEXT: start:
-; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !0)
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META0]])
; CHECK-NEXT: br label [[BODY:%.*]]
; CHECK: body:
-; CHECK-NEXT: [[X:%.*]] = load i32, ptr [[ADDR1:%.*]], align 4, !alias.scope !0
-; CHECK-NEXT: store i32 [[X]], ptr [[ADDR2:%.*]], align 4, !noalias !0
+; CHECK-NEXT: [[X:%.*]] = load i32, ptr [[ADDR1:%.*]], align 4, !alias.scope [[META0]]
+; CHECK-NEXT: store i32 [[X]], ptr [[ADDR2:%.*]], align 4, !noalias [[META0]]
; CHECK-NEXT: [[ADDR1I_1:%.*]] = getelementptr inbounds i32, ptr [[ADDR1]], i32 1
; CHECK-NEXT: [[ADDR2I_1:%.*]] = getelementptr inbounds i32, ptr [[ADDR2]], i32 1
-; CHECK-NEXT: [[X_1:%.*]] = load i32, ptr [[ADDR1I_1]], align 4, !alias.scope !0
-; CHECK-NEXT: store i32 [[X_1]], ptr [[ADDR2I_1]], align 4, !noalias !0
-; CHECK-NEXT: [[X_2:%.*]] = load i32, ptr [[ADDR1]], align 4, !alias.scope !0
-; CHECK-NEXT: store i32 [[X_2]], ptr [[ADDR2]], align 4, !noalias !0
+; CHECK-NEXT: [[X_1:%.*]] = load i32, ptr [[ADDR1I_1]], align 4, !alias.scope [[META0]]
+; CHECK-NEXT: store i32 [[X_1]], ptr [[ADDR2I_1]], align 4, !noalias [[META0]]
+; CHECK-NEXT: [[X_2:%.*]] = load i32, ptr [[ADDR1]], align 4, !alias.scope [[META0]]
+; CHECK-NEXT: store i32 [[X_2]], ptr [[ADDR2]], align 4, !noalias [[META0]]
; CHECK-NEXT: [[ADDR1I_3:%.*]] = getelementptr inbounds i32, ptr [[ADDR1]], i32 1
; CHECK-NEXT: [[ADDR2I_3:%.*]] = getelementptr inbounds i32, ptr [[ADDR2]], i32 1
-; CHECK-NEXT: [[X_3:%.*]] = load i32, ptr [[ADDR1I_3]], align 4, !alias.scope !0
-; CHECK-NEXT: store i32 [[X_3]], ptr [[ADDR2I_3]], align 4, !noalias !0
+; CHECK-NEXT: [[X_3:%.*]] = load i32, ptr [[ADDR1I_3]], align 4, !alias.scope [[META0]]
+; CHECK-NEXT: store i32 [[X_3]], ptr [[ADDR2I_3]], align 4, !noalias [[META0]]
; CHECK-NEXT: ret void
;
start:
@@ -88,13 +88,13 @@ end:
declare void @llvm.experimental.noalias.scope.decl(metadata)
-!0 = distinct !{!0}
+!0 = distinct !{!0, i1 false}
!1 = distinct !{!1, !0}
!2 = !{!1}
; CHECK: !0 = !{!1}
; CHECK: !1 = distinct !{!1, !2}
-; CHECK: !2 = distinct !{!2}
+; CHECK: !2 = distinct !{!2, i1 false}
; CHECK: !3 = !{!4}
; CHECK: !4 = distinct !{!4, !2, !"It1"}
; CHECK: !5 = !{!6}
diff --git a/llvm/test/Transforms/LoopUnroll/peel-loop-noalias-scope-decl.ll b/llvm/test/Transforms/LoopUnroll/peel-loop-noalias-scope-decl.ll
index 839bdbd541e4b5..60355f740f8f39 100644
--- a/llvm/test/Transforms/LoopUnroll/peel-loop-noalias-scope-decl.ll
+++ b/llvm/test/Transforms/LoopUnroll/peel-loop-noalias-scope-decl.ll
@@ -10,35 +10,35 @@ target triple = "x86_64-unknown-linux-gnu"
define internal fastcc void @test01(ptr %p0, ptr %p1, ptr %p2) unnamed_addr align 2 {
; CHECK-LABEL: @test01(
; CHECK-NEXT: for.body47.lr.ph:
-; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !0)
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META0:![0-9]+]])
; CHECK-NEXT: br label [[FOR_BODY47_PEEL_BEGIN:%.*]]
; CHECK: for.body47.peel.begin:
; CHECK-NEXT: br label [[FOR_BODY47_PEEL:%.*]]
; CHECK: for.body47.peel:
-; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !3)
-; CHECK-NEXT: store i8 42, ptr [[P0:%.*]], align 1, !alias.scope !3
-; CHECK-NEXT: store i8 43, ptr [[P1:%.*]], align 1, !alias.scope !0
-; CHECK-NEXT: store i8 44, ptr [[P2:%.*]], align 1, !alias.scope !5
-; CHECK-NEXT: store i8 42, ptr [[P0]], align 1, !noalias !3
-; CHECK-NEXT: store i8 43, ptr [[P1]], align 1, !noalias !0
-; CHECK-NEXT: store i8 44, ptr [[P2]], align 1, !noalias !5
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META3:![0-9]+]])
+; CHECK-NEXT: store i8 42, ptr [[P0:%.*]], align 1, !alias.scope [[META3]]
+; CHECK-NEXT: store i8 43, ptr [[P1:%.*]], align 1, !alias.scope [[META0]]
+; CHECK-NEXT: store i8 44, ptr [[P2:%.*]], align 1, !alias.scope [[META5:![0-9]+]]
+; CHECK-NEXT: store i8 42, ptr [[P0]], align 1, !noalias [[META3]]
+; CHECK-NEXT: store i8 43, ptr [[P1]], align 1, !noalias [[META0]]
+; CHECK-NEXT: store i8 44, ptr [[P2]], align 1, !noalias [[META5]]
; CHECK-NEXT: [[CMP52_PEEL:%.*]] = icmp eq i32 0, 0
; CHECK-NEXT: br i1 [[CMP52_PEEL]], label [[COND_TRUE_PEEL:%.*]], label [[COND_END_PEEL:%.*]]
; CHECK: cond.true.peel:
-; CHECK-NEXT: store i8 52, ptr [[P0]], align 1, !alias.scope !3
-; CHECK-NEXT: store i8 53, ptr [[P1]], align 1, !alias.scope !0
-; CHECK-NEXT: store i8 54, ptr [[P2]], align 1, !alias.scope !5
-; CHECK-NEXT: store i8 52, ptr [[P0]], align 1, !noalias !3
-; CHECK-NEXT: store i8 53, ptr [[P1]], align 1, !noalias !0
-; CHECK-NEXT: store i8 54, ptr [[P2]], align 1, !noalias !5
+; CHECK-NEXT: store i8 52, ptr [[P0]], align 1, !alias.scope [[META3]]
+; CHECK-NEXT: store i8 53, ptr [[P1]], align 1, !alias.scope [[META0]]
+; CHECK-NEXT: store i8 54, ptr [[P2]], align 1, !alias.scope [[META5]]
+; CHECK-NEXT: store i8 52, ptr [[P0]], align 1, !noalias [[META3]]
+; CHECK-NEXT: store i8 53, ptr [[P1]], align 1, !noalias [[META0]]
+; CHECK-NEXT: store i8 54, ptr [[P2]], align 1, !noalias [[META5]]
; CHECK-NEXT: br label [[COND_END_PEEL]]
; CHECK: cond.end.peel:
-; CHECK-NEXT: store i8 62, ptr [[P0]], align 1, !alias.scope !3
-; CHECK-NEXT: store i8 63, ptr [[P1]], align 1, !alias.scope !0
-; CHECK-NEXT: store i8 64, ptr [[P2]], align 1, !alias.scope !5
-; CHECK-NEXT: store i8 62, ptr [[P0]], align 1, !noalias !3
-; CHECK-NEXT: store i8 63, ptr [[P1]], align 1, !noalias !0
-; CHECK-NEXT: store i8 64, ptr [[P2]], align 1, !noalias !5
+; CHECK-NEXT: store i8 62, ptr [[P0]], align 1, !alias.scope [[META3]]
+; CHECK-NEXT: store i8 63, ptr [[P1]], align 1, !alias.scope [[META0]]
+; CHECK-NEXT: store i8 64, ptr [[P2]], align 1, !alias.scope [[META5]]
+; CHECK-NEXT: store i8 62, ptr [[P0]], align 1, !noalias [[META3]]
+; CHECK-NEXT: store i8 63, ptr [[P1]], align 1, !noalias [[META0]]
+; CHECK-NEXT: store i8 64, ptr [[P2]], align 1, !noalias [[META5]]
; CHECK-NEXT: [[INC_PEEL:%.*]] = add nuw i32 0, 1
; CHECK-NEXT: [[EXITCOND_NOT_PEEL:%.*]] = icmp eq i32 [[INC_PEEL]], undef
; CHECK-NEXT: br i1 [[EXITCOND_NOT_PEEL]], label [[FOR_COND_CLEANUP46:%.*]], label [[FOR_BODY47_PEEL_NEXT:%.*]]
@@ -54,31 +54,31 @@ define internal fastcc void @test01(ptr %p0, ptr %p1, ptr %p2) unnamed_addr alig
; CHECK-NEXT: ret void
; CHECK: for.body47:
; CHECK-NEXT: [[J_02:%.*]] = phi i32 [ [[INC_PEEL]], [[FOR_BODY47_LR_PH_PEEL_NEWPH]] ], [ [[INC:%.*]], [[COND_END:%.*]] ]
-; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !6)
-; CHECK-NEXT: store i8 42, ptr [[P0]], align 1, !alias.scope !6
-; CHECK-NEXT: store i8 43, ptr [[P1]], align 1, !alias.scope !0
-; CHECK-NEXT: store i8 44, ptr [[P2]], align 1, !alias.scope !8
-; CHECK-NEXT: store i8 42, ptr [[P0]], align 1, !noalias !6
-; CHECK-NEXT: store i8 43, ptr [[P1]], align 1, !noalias !0
-; CHECK-NEXT: store i8 44, ptr [[P2]], align 1, !noalias !8
+; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata [[META6:![0-9]+]])
+; CHECK-NEXT: store i8 42, ptr [[P0]], align 1, !alias.scope [[META6]]
+; CHECK-NEXT: store i8 43, ptr [[P1]], align 1, !alias.scope [[META0]]
+; CHECK-NEXT: store i8 44, ptr [[P2]], align 1, !alias.scope [[META8:![0-9]+]]
+; CHECK-NEXT: store i8 42, ptr [[P0]], align 1, !noalias [[META6]]
+; CHECK-NEXT: store i8 43, ptr [[P1]], align 1, !noalias [[META0]]
+; CHECK-NEXT: store i8 44, ptr [[P2]], align 1, !noalias [[META8]]
; CHECK-NEXT: br i1 false, label [[COND_TRUE:%.*]], label [[COND_END]]
; CHECK: cond.true:
-; CHECK-NEXT: store i8 52, ptr [[P0]], align 1, !alias.scope !6
-; CHECK-NEXT: store i8 53, ptr [[P1]], align 1, !alias.scope !0
-; CHECK-NEXT: store i8 54, ptr [[P2]], align 1, !alias.scope !8
-; CHECK-NEXT: store i8 52, ptr [[P0]], align 1, !noalias !6
-; CHECK-NEXT: store i8 53, ptr [[P1]], align 1, !noalias !0
-; CHECK-NEXT: store i8 54, ptr [[P2]], align 1, !noalias !8
+; CHECK-NEXT: store i8 52, ptr [[P0]], align 1, !alias.scope [[META6]]
+; CHECK-NEXT: store i8 53, ptr [[P1]], align 1, !alias.scope [[META0]]
+; CHECK-NEXT: store i8 54, ptr [[P2]], align 1, !alias.scope [[META8]]
+; CHECK-NEXT: store i8 52, ptr [[P0]], align 1, !noalias [[META6]]
+; CHECK-NEXT: store i8 53, ptr [[P1]], align 1, !noalias [[META0]]
+; CHECK-NEXT: store i8 54, ptr [[P2]], align 1, !noalias [[META8]]
; CHECK-NEXT: br label [[COND_END]]
; CHECK: cond.end:
-; CHECK-NEXT: store i8 62, ptr [[P0]], align 1, !alias.scope !6
-; CHECK-NEXT: store i8 63, ptr [[P1]], align 1, !alias.scope !0
-; CHECK-NEXT: store i8 64, ptr [[P2]], align 1, !alias.scope !8
-; CHECK-NEXT: store i8 62, ptr [[P0]], align 1, !noalias !6
-; CHECK-NEXT: store i8 63, ptr [[P1]], align 1, !noalias !0
-; CHECK-NEXT: store i8 64, ptr [[P2]], align 1, !noalias !8
+; CHECK-NEXT: store i8 62, ptr [[P0]], align 1, !alias.scope [[META6]]
+; CHECK-NEXT: store i8 63, ptr [[P1]], align 1, !alias.scope [[META0]]
+; CHECK-NEXT: store i8 64, ptr [[P2]], align 1, !alias.scope [[META8]]
+; CHECK-NEXT: store i8 62, ptr [[P0]], align 1, !noalias [[META6]]
+; CHECK-NEXT: store i8 63, ptr [[P1]], align 1, !noalias [[META0]]
+; CHECK-NEXT: store i8 64, ptr [[P2]], align 1, !noalias [[META8]]
; CHECK-NEXT: [[INC]] = add nuw i32 [[J_02]], 1
-; CHECK-NEXT: br i1 undef, label [[FOR_COND_CLEANUP46_LOOPEXIT:%.*]], label [[FOR_BODY47]], [[LOOP9:!llvm.loop !.*]]
+; CHECK-NEXT: br i1 undef, label [[FOR_COND_CLEANUP46_LOOPEXIT:%.*]], label [[FOR_BODY47]], !llvm.loop [[LOOP9:![0-9]+]]
;
for.body47.lr.ph:
call void @llvm.experimental.noalias.scope.decl(metadata !5)
@@ -127,7 +127,7 @@ attributes #0 = { inaccessiblememonly nofree nosync nounwind willreturn }
!0 = !{!1}
!1 = distinct !{!1, !2, !"foo: %inner.result"}
-!2 = distinct !{!2, !"foo"}
+!2 = distinct !{!2, i1 false, !"foo"}
!3 = distinct !{!3, !4}
!4 = !{!"llvm.loop.mustprogress"}
!5 = !{!6}
@@ -136,7 +136,7 @@ attributes #0 = { inaccessiblememonly nofree nosync nounwind willreturn }
; CHECK: !0 = !{!1}
; CHECK: !1 = distinct !{!1, !2, !"foo: %outer.result"}
-; CHECK: !2 = distinct !{!2, !"foo"}
+; CHECK: !2 = distinct !{!2, i1 false, !"foo"}
; CHECK: !3 = !{!4}
; CHECK: !4 = distinct !{!4, !2, !"foo: %inner.result:Peel0"}
; CHECK: !5 = !{!4, !1}
diff --git a/llvm/test/Transforms/LoopVectorize/AArch64/masked_ldst_sme.ll b/llvm/test/Transforms/LoopVectorize/AArch64/masked_ldst_sme.ll
index 6399878655ed13..034c0435e12d97 100644
--- a/llvm/test/Transforms/LoopVectorize/AArch64/masked_ldst_sme.ll
+++ b/llvm/test/Transforms/LoopVectorize/AArch64/masked_ldst_sme.ll
@@ -167,7 +167,7 @@ attributes #0 = { uwtable vscale_range(1,16) "aarch64_pstate_sm_body" "target-fe
;.
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
-; CHECK: [[META2]] = distinct !{[[META2]], !"LVerDomain"}
+; CHECK: [[META2]] = distinct !{[[META2]], i1 false, !"LVerDomain"}
; CHECK: [[META3]] = !{[[META4:![0-9]+]]}
; CHECK: [[META4]] = distinct !{[[META4]], [[META2]]}
; CHECK: [[META5]] = !{[[META6:![0-9]+]], [[META1]], [[META7:![0-9]+]], [[META8:![0-9]+]]}
diff --git a/llvm/test/Transforms/LoopVectorize/AArch64/predicated-costs.ll b/llvm/test/Transforms/LoopVectorize/AArch64/predicated-costs.ll
index 285e978a5b9a82..0bc5a3826d88cf 100644
--- a/llvm/test/Transforms/LoopVectorize/AArch64/predicated-costs.ll
+++ b/llvm/test/Transforms/LoopVectorize/AArch64/predicated-costs.ll
@@ -520,7 +520,7 @@ exit:
;.
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
-; CHECK: [[META2]] = distinct !{[[META2]], !"LVerDomain"}
+; CHECK: [[META2]] = distinct !{[[META2]], i1 false, !"LVerDomain"}
; CHECK: [[META3]] = !{[[META4:![0-9]+]]}
; CHECK: [[META4]] = distinct !{[[META4]], [[META2]]}
; CHECK: [[LOOP5]] = distinct !{[[LOOP5]], [[META6:![0-9]+]], [[META7:![0-9]+]], [[META8:![0-9]+]]}
diff --git a/llvm/test/Transforms/LoopVectorize/AArch64/store-costs-sve.ll b/llvm/test/Transforms/LoopVectorize/AArch64/store-costs-sve.ll
index 7ba5eb17bdc27c..7acd0440d5c4b7 100644
--- a/llvm/test/Transforms/LoopVectorize/AArch64/store-costs-sve.ll
+++ b/llvm/test/Transforms/LoopVectorize/AArch64/store-costs-sve.ll
@@ -264,7 +264,7 @@ attributes #1 = { vscale_range(1,16) "target-features"="+sve" }
; DEFAULT: [[LOOP5]] = distinct !{[[LOOP5]], [[META2]], [[META1]]}
; DEFAULT: [[META6]] = !{[[META7:![0-9]+]]}
; DEFAULT: [[META7]] = distinct !{[[META7]], [[META8:![0-9]+]]}
-; DEFAULT: [[META8]] = distinct !{[[META8]], !"LVerDomain"}
+; DEFAULT: [[META8]] = distinct !{[[META8]], i1 false, !"LVerDomain"}
; DEFAULT: [[META9]] = !{[[META10:![0-9]+]]}
; DEFAULT: [[META10]] = distinct !{[[META10]], [[META8]]}
; DEFAULT: [[LOOP11]] = distinct !{[[LOOP11]], [[META1]], [[META2]]}
@@ -277,7 +277,7 @@ attributes #1 = { vscale_range(1,16) "target-features"="+sve" }
; PRED: [[META2]] = !{!"llvm.loop.unroll.runtime.disable"}
; PRED: [[META3]] = !{[[META4:![0-9]+]]}
; PRED: [[META4]] = distinct !{[[META4]], [[META5:![0-9]+]]}
-; PRED: [[META5]] = distinct !{[[META5]], !"LVerDomain"}
+; PRED: [[META5]] = distinct !{[[META5]], i1 false, !"LVerDomain"}
; PRED: [[META6]] = !{[[META7:![0-9]+]]}
; PRED: [[META7]] = distinct !{[[META7]], [[META5]]}
; PRED: [[LOOP8]] = distinct !{[[LOOP8]], [[META1]], [[META2]]}
diff --git a/llvm/test/Transforms/LoopVectorize/AArch64/sve2-histcnt.ll b/llvm/test/Transforms/LoopVectorize/AArch64/sve2-histcnt.ll
index ca92a8e372ea11..2c8d2f25c64bc7 100644
--- a/llvm/test/Transforms/LoopVectorize/AArch64/sve2-histcnt.ll
+++ b/llvm/test/Transforms/LoopVectorize/AArch64/sve2-histcnt.ll
@@ -868,9 +868,9 @@ attributes #0 = { "target-features"="+sve2" vscale_range(1,16) }
!5 = !{!"llvm.loop.interleave.count", i32 1}
!6 = !{!7}
!7 = distinct !{!7, !8, !"scope-index"}
-!8 = distinct !{!8, !"scopes-indices"}
+!8 = distinct !{!8, i1 false, !"scopes-indices"}
!9 = !{!10}
!10 = distinct !{!10, !8, !"scope-bucket"}
!11 = !{!10, !12}
!12 = distinct !{!12, !13, !"scope-bucket-2"}
-!13 = distinct !{!13, !"scopes-buckets"}
+!13 = distinct !{!13, i1 false, !"scopes-buckets"}
diff --git a/llvm/test/Transforms/LoopVectorize/RISCV/blocks-with-dead-instructions.ll b/llvm/test/Transforms/LoopVectorize/RISCV/blocks-with-dead-instructions.ll
index 9fa4da804956bf..13b700e5541ee2 100644
--- a/llvm/test/Transforms/LoopVectorize/RISCV/blocks-with-dead-instructions.ll
+++ b/llvm/test/Transforms/LoopVectorize/RISCV/blocks-with-dead-instructions.ll
@@ -553,7 +553,7 @@ attributes #0 = { "target-features"="+64bit,+v" vscale_range(2, 1024) }
; CHECK: [[LOOP9]] = distinct !{[[LOOP9]], [[META1]], [[META2]]}
; CHECK: [[META10]] = !{[[META11:![0-9]+]]}
; CHECK: [[META11]] = distinct !{[[META11]], [[META12:![0-9]+]]}
-; CHECK: [[META12]] = distinct !{[[META12]], !"LVerDomain"}
+; CHECK: [[META12]] = distinct !{[[META12]], i1 false, !"LVerDomain"}
; CHECK: [[META13]] = !{[[META14:![0-9]+]], [[META15:![0-9]+]]}
; CHECK: [[META14]] = distinct !{[[META14]], [[META12]]}
; CHECK: [[META15]] = distinct !{[[META15]], [[META12]]}
diff --git a/llvm/test/Transforms/LoopVectorize/RISCV/dead-ops-cost.ll b/llvm/test/Transforms/LoopVectorize/RISCV/dead-ops-cost.ll
index 5d90cafc565c87..1ad545dce55f4b 100644
--- a/llvm/test/Transforms/LoopVectorize/RISCV/dead-ops-cost.ll
+++ b/llvm/test/Transforms/LoopVectorize/RISCV/dead-ops-cost.ll
@@ -383,14 +383,14 @@ exit:
; CHECK: [[META2]] = !{!"llvm.loop.unroll.runtime.disable"}
; CHECK: [[META3]] = !{[[META4:![0-9]+]]}
; CHECK: [[META4]] = distinct !{[[META4]], [[META5:![0-9]+]]}
-; CHECK: [[META5]] = distinct !{[[META5]], !"LVerDomain"}
+; CHECK: [[META5]] = distinct !{[[META5]], i1 false, !"LVerDomain"}
; CHECK: [[META6]] = !{[[META7:![0-9]+]]}
; CHECK: [[META7]] = distinct !{[[META7]], [[META5]]}
; CHECK: [[LOOP8]] = distinct !{[[LOOP8]], [[META1]], [[META2]]}
; CHECK: [[LOOP9]] = distinct !{[[LOOP9]], [[META1]]}
; CHECK: [[META10]] = !{[[META11:![0-9]+]]}
; CHECK: [[META11]] = distinct !{[[META11]], [[META12:![0-9]+]]}
-; CHECK: [[META12]] = distinct !{[[META12]], !"LVerDomain"}
+; CHECK: [[META12]] = distinct !{[[META12]], i1 false, !"LVerDomain"}
; CHECK: [[META13]] = !{[[META14:![0-9]+]]}
; CHECK: [[META14]] = distinct !{[[META14]], [[META12]]}
; CHECK: [[LOOP15]] = distinct !{[[LOOP15]], [[META1]], [[META2]]}
diff --git a/llvm/test/Transforms/LoopVectorize/RISCV/induction-costs.ll b/llvm/test/Transforms/LoopVectorize/RISCV/induction-costs.ll
index aa5734371f0d5d..965de36f6610fb 100644
--- a/llvm/test/Transforms/LoopVectorize/RISCV/induction-costs.ll
+++ b/llvm/test/Transforms/LoopVectorize/RISCV/induction-costs.ll
@@ -238,7 +238,7 @@ attributes #1 = { "target-cpu"="sifive-p670" vscale_range(2, 1024) }
;.
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
-; CHECK: [[META2]] = distinct !{[[META2]], !"LVerDomain"}
+; CHECK: [[META2]] = distinct !{[[META2]], i1 false, !"LVerDomain"}
; CHECK: [[META3]] = !{[[META4:![0-9]+]], [[META5:![0-9]+]]}
; CHECK: [[META4]] = distinct !{[[META4]], [[META2]]}
; CHECK: [[META5]] = distinct !{[[META5]], [[META2]]}
diff --git a/llvm/test/Transforms/LoopVectorize/RISCV/tail-folding-cast-intrinsics.ll b/llvm/test/Transforms/LoopVectorize/RISCV/tail-folding-cast-intrinsics.ll
index 314ec3d7a51d04..60dba3d959d170 100644
--- a/llvm/test/Transforms/LoopVectorize/RISCV/tail-folding-cast-intrinsics.ll
+++ b/llvm/test/Transforms/LoopVectorize/RISCV/tail-folding-cast-intrinsics.ll
@@ -1260,7 +1260,7 @@ exit:
;.
; IF-EVL: [[META0]] = !{[[META1:![0-9]+]]}
; IF-EVL: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
-; IF-EVL: [[META2]] = distinct !{[[META2]], !"LVerDomain"}
+; IF-EVL: [[META2]] = distinct !{[[META2]], i1 false, !"LVerDomain"}
; IF-EVL: [[META3]] = !{[[META4:![0-9]+]]}
; IF-EVL: [[META4]] = distinct !{[[META4]], [[META2]]}
; IF-EVL: [[LOOP5]] = distinct !{[[LOOP5]], [[META6:![0-9]+]], [[META7:![0-9]+]]}
@@ -1269,28 +1269,28 @@ exit:
; IF-EVL: [[LOOP8]] = distinct !{[[LOOP8]], [[META6]]}
; IF-EVL: [[META9]] = !{[[META10:![0-9]+]]}
; IF-EVL: [[META10]] = distinct !{[[META10]], [[META11:![0-9]+]]}
-; IF-EVL: [[META11]] = distinct !{[[META11]], !"LVerDomain"}
+; IF-EVL: [[META11]] = distinct !{[[META11]], i1 false, !"LVerDomain"}
; IF-EVL: [[META12]] = !{[[META13:![0-9]+]]}
; IF-EVL: [[META13]] = distinct !{[[META13]], [[META11]]}
; IF-EVL: [[LOOP14]] = distinct !{[[LOOP14]], [[META6]], [[META7]]}
; IF-EVL: [[LOOP15]] = distinct !{[[LOOP15]], [[META6]]}
; IF-EVL: [[META16]] = !{[[META17:![0-9]+]]}
; IF-EVL: [[META17]] = distinct !{[[META17]], [[META18:![0-9]+]]}
-; IF-EVL: [[META18]] = distinct !{[[META18]], !"LVerDomain"}
+; IF-EVL: [[META18]] = distinct !{[[META18]], i1 false, !"LVerDomain"}
; IF-EVL: [[META19]] = !{[[META20:![0-9]+]]}
; IF-EVL: [[META20]] = distinct !{[[META20]], [[META18]]}
; IF-EVL: [[LOOP21]] = distinct !{[[LOOP21]], [[META6]], [[META7]]}
; IF-EVL: [[LOOP22]] = distinct !{[[LOOP22]], [[META6]]}
; IF-EVL: [[META23]] = !{[[META24:![0-9]+]]}
; IF-EVL: [[META24]] = distinct !{[[META24]], [[META25:![0-9]+]]}
-; IF-EVL: [[META25]] = distinct !{[[META25]], !"LVerDomain"}
+; IF-EVL: [[META25]] = distinct !{[[META25]], i1 false, !"LVerDomain"}
; IF-EVL: [[META26]] = !{[[META27:![0-9]+]]}
; IF-EVL: [[META27]] = distinct !{[[META27]], [[META25]]}
; IF-EVL: [[LOOP28]] = distinct !{[[LOOP28]], [[META6]], [[META7]]}
; IF-EVL: [[LOOP29]] = distinct !{[[LOOP29]], [[META6]]}
; IF-EVL: [[META30]] = !{[[META31:![0-9]+]]}
; IF-EVL: [[META31]] = distinct !{[[META31]], [[META32:![0-9]+]]}
-; IF-EVL: [[META32]] = distinct !{[[META32]], !"LVerDomain"}
+; IF-EVL: [[META32]] = distinct !{[[META32]], i1 false, !"LVerDomain"}
; IF-EVL: [[META33]] = !{[[META34:![0-9]+]]}
; IF-EVL: [[META34]] = distinct !{[[META34]], [[META32]]}
; IF-EVL: [[LOOP35]] = distinct !{[[LOOP35]], [[META6]], [[META7]]}
@@ -1309,7 +1309,7 @@ exit:
;.
; NO-VP: [[META0]] = !{[[META1:![0-9]+]]}
; NO-VP: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
-; NO-VP: [[META2]] = distinct !{[[META2]], !"LVerDomain"}
+; NO-VP: [[META2]] = distinct !{[[META2]], i1 false, !"LVerDomain"}
; NO-VP: [[META3]] = !{[[META4:![0-9]+]]}
; NO-VP: [[META4]] = distinct !{[[META4]], [[META2]]}
; NO-VP: [[LOOP5]] = distinct !{[[LOOP5]], [[META6:![0-9]+]], [[META7:![0-9]+]]}
@@ -1318,28 +1318,28 @@ exit:
; NO-VP: [[LOOP8]] = distinct !{[[LOOP8]], [[META6]]}
; NO-VP: [[META9]] = !{[[META10:![0-9]+]]}
; NO-VP: [[META10]] = distinct !{[[META10]], [[META11:![0-9]+]]}
-; NO-VP: [[META11]] = distinct !{[[META11]], !"LVerDomain"}
+; NO-VP: [[META11]] = distinct !{[[META11]], i1 false, !"LVerDomain"}
; NO-VP: [[META12]] = !{[[META13:![0-9]+]]}
; NO-VP: [[META13]] = distinct !{[[META13]], [[META11]]}
; NO-VP: [[LOOP14]] = distinct !{[[LOOP14]], [[META6]], [[META7]]}
; NO-VP: [[LOOP15]] = distinct !{[[LOOP15]], [[META6]]}
; NO-VP: [[META16]] = !{[[META17:![0-9]+]]}
; NO-VP: [[META17]] = distinct !{[[META17]], [[META18:![0-9]+]]}
-; NO-VP: [[META18]] = distinct !{[[META18]], !"LVerDomain"}
+; NO-VP: [[META18]] = distinct !{[[META18]], i1 false, !"LVerDomain"}
; NO-VP: [[META19]] = !{[[META20:![0-9]+]]}
; NO-VP: [[META20]] = distinct !{[[META20]], [[META18]]}
; NO-VP: [[LOOP21]] = distinct !{[[LOOP21]], [[META6]], [[META7]]}
; NO-VP: [[LOOP22]] = distinct !{[[LOOP22]], [[META6]]}
; NO-VP: [[META23]] = !{[[META24:![0-9]+]]}
; NO-VP: [[META24]] = distinct !{[[META24]], [[META25:![0-9]+]]}
-; NO-VP: [[META25]] = distinct !{[[META25]], !"LVerDomain"}
+; NO-VP: [[META25]] = distinct !{[[META25]], i1 false, !"LVerDomain"}
; NO-VP: [[META26]] = !{[[META27:![0-9]+]]}
; NO-VP: [[META27]] = distinct !{[[META27]], [[META25]]}
; NO-VP: [[LOOP28]] = distinct !{[[LOOP28]], [[META6]], [[META7]]}
; NO-VP: [[LOOP29]] = distinct !{[[LOOP29]], [[META6]]}
; NO-VP: [[META30]] = !{[[META31:![0-9]+]]}
; NO-VP: [[META31]] = distinct !{[[META31]], [[META32:![0-9]+]]}
-; NO-VP: [[META32]] = distinct !{[[META32]], !"LVerDomain"}
+; NO-VP: [[META32]] = distinct !{[[META32]], i1 false, !"LVerDomain"}
; NO-VP: [[META33]] = !{[[META34:![0-9]+]]}
; NO-VP: [[META34]] = distinct !{[[META34]], [[META32]]}
; NO-VP: [[LOOP35]] = distinct !{[[LOOP35]], [[META6]], [[META7]]}
diff --git a/llvm/test/Transforms/LoopVectorize/RISCV/tail-folding-intermediate-store.ll b/llvm/test/Transforms/LoopVectorize/RISCV/tail-folding-intermediate-store.ll
index f24d7b4632eee0..3c6a006dbe249b 100644
--- a/llvm/test/Transforms/LoopVectorize/RISCV/tail-folding-intermediate-store.ll
+++ b/llvm/test/Transforms/LoopVectorize/RISCV/tail-folding-intermediate-store.ll
@@ -236,7 +236,7 @@ for.end:
;.
; IF-EVL-OUTLOOP: [[META0]] = !{[[META1:![0-9]+]]}
; IF-EVL-OUTLOOP: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
-; IF-EVL-OUTLOOP: [[META2]] = distinct !{[[META2]], !"LVerDomain"}
+; IF-EVL-OUTLOOP: [[META2]] = distinct !{[[META2]], i1 false, !"LVerDomain"}
; IF-EVL-OUTLOOP: [[LOOP3]] = distinct !{[[LOOP3]], [[META4:![0-9]+]], [[META5:![0-9]+]]}
; IF-EVL-OUTLOOP: [[META4]] = !{!"llvm.loop.isvectorized", i32 1}
; IF-EVL-OUTLOOP: [[META5]] = !{!"llvm.loop.unroll.runtime.disable"}
@@ -246,7 +246,7 @@ for.end:
;.
; IF-EVL-INLOOP: [[META0]] = !{[[META1:![0-9]+]]}
; IF-EVL-INLOOP: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
-; IF-EVL-INLOOP: [[META2]] = distinct !{[[META2]], !"LVerDomain"}
+; IF-EVL-INLOOP: [[META2]] = distinct !{[[META2]], i1 false, !"LVerDomain"}
; IF-EVL-INLOOP: [[LOOP3]] = distinct !{[[LOOP3]], [[META4:![0-9]+]], [[META5:![0-9]+]]}
; IF-EVL-INLOOP: [[META4]] = !{!"llvm.loop.isvectorized", i32 1}
; IF-EVL-INLOOP: [[META5]] = !{!"llvm.loop.unroll.runtime.disable"}
@@ -256,7 +256,7 @@ for.end:
;.
; NO-VP-OUTLOOP: [[META0]] = !{[[META1:![0-9]+]]}
; NO-VP-OUTLOOP: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
-; NO-VP-OUTLOOP: [[META2]] = distinct !{[[META2]], !"LVerDomain"}
+; NO-VP-OUTLOOP: [[META2]] = distinct !{[[META2]], i1 false, !"LVerDomain"}
; NO-VP-OUTLOOP: [[LOOP3]] = distinct !{[[LOOP3]], [[META4:![0-9]+]], [[META5:![0-9]+]]}
; NO-VP-OUTLOOP: [[META4]] = !{!"llvm.loop.isvectorized", i32 1}
; NO-VP-OUTLOOP: [[META5]] = !{!"llvm.loop.unroll.runtime.disable"}
@@ -266,7 +266,7 @@ for.end:
;.
; NO-VP-INLOOP: [[META0]] = !{[[META1:![0-9]+]]}
; NO-VP-INLOOP: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
-; NO-VP-INLOOP: [[META2]] = distinct !{[[META2]], !"LVerDomain"}
+; NO-VP-INLOOP: [[META2]] = distinct !{[[META2]], i1 false, !"LVerDomain"}
; NO-VP-INLOOP: [[LOOP3]] = distinct !{[[LOOP3]], [[META4:![0-9]+]], [[META5:![0-9]+]]}
; NO-VP-INLOOP: [[META4]] = !{!"llvm.loop.isvectorized", i32 1}
; NO-VP-INLOOP: [[META5]] = !{!"llvm.loop.unroll.runtime.disable"}
diff --git a/llvm/test/Transforms/LoopVectorize/RISCV/truncate-to-minimal-bitwidth-cost.ll b/llvm/test/Transforms/LoopVectorize/RISCV/truncate-to-minimal-bitwidth-cost.ll
index e7acfe9a4f4fc0..0dec26322cbf7a 100644
--- a/llvm/test/Transforms/LoopVectorize/RISCV/truncate-to-minimal-bitwidth-cost.ll
+++ b/llvm/test/Transforms/LoopVectorize/RISCV/truncate-to-minimal-bitwidth-cost.ll
@@ -358,7 +358,7 @@ attributes #1 = { "target-features"="+64bit,+v" }
; CHECK: [[LOOP5]] = distinct !{[[LOOP5]], [[META1]], [[META2]]}
; CHECK: [[META6]] = !{[[META7:![0-9]+]]}
; CHECK: [[META7]] = distinct !{[[META7]], [[META8:![0-9]+]]}
-; CHECK: [[META8]] = distinct !{[[META8]], !"LVerDomain"}
+; CHECK: [[META8]] = distinct !{[[META8]], i1 false, !"LVerDomain"}
; CHECK: [[META9]] = !{[[META10:![0-9]+]], [[META11:![0-9]+]]}
; CHECK: [[META10]] = distinct !{[[META10]], [[META8]]}
; CHECK: [[META11]] = distinct !{[[META11]], [[META8]]}
diff --git a/llvm/test/Transforms/LoopVectorize/RISCV/type-info-cache-evl-crash.ll b/llvm/test/Transforms/LoopVectorize/RISCV/type-info-cache-evl-crash.ll
index a9c793406032e4..fc8ccf602963a2 100644
--- a/llvm/test/Transforms/LoopVectorize/RISCV/type-info-cache-evl-crash.ll
+++ b/llvm/test/Transforms/LoopVectorize/RISCV/type-info-cache-evl-crash.ll
@@ -90,7 +90,7 @@ exit:
;.
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
-; CHECK: [[META2]] = distinct !{[[META2]], !"LVerDomain"}
+; CHECK: [[META2]] = distinct !{[[META2]], i1 false, !"LVerDomain"}
; CHECK: [[META3]] = !{[[META4:![0-9]+]]}
; CHECK: [[META4]] = distinct !{[[META4]], [[META2]]}
; CHECK: [[LOOP5]] = distinct !{[[LOOP5]], [[META6:![0-9]+]], [[META7:![0-9]+]]}
diff --git a/llvm/test/Transforms/LoopVectorize/RISCV/vf-will-not-generate-any-vector-insts.ll b/llvm/test/Transforms/LoopVectorize/RISCV/vf-will-not-generate-any-vector-insts.ll
index dca4f477383092..b3ab395508d3bd 100644
--- a/llvm/test/Transforms/LoopVectorize/RISCV/vf-will-not-generate-any-vector-insts.ll
+++ b/llvm/test/Transforms/LoopVectorize/RISCV/vf-will-not-generate-any-vector-insts.ll
@@ -62,7 +62,7 @@ exit:
;.
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
-; CHECK: [[META2]] = distinct !{[[META2]], !"LVerDomain"}
+; CHECK: [[META2]] = distinct !{[[META2]], i1 false, !"LVerDomain"}
; CHECK: [[META3]] = !{[[META4:![0-9]+]]}
; CHECK: [[META4]] = distinct !{[[META4]], [[META2]]}
; CHECK: [[LOOP5]] = distinct !{[[LOOP5]], [[META6:![0-9]+]], [[META7:![0-9]+]]}
diff --git a/llvm/test/Transforms/LoopVectorize/VPlan/AArch64/sve2-histcnt-vplan.ll b/llvm/test/Transforms/LoopVectorize/VPlan/AArch64/sve2-histcnt-vplan.ll
index bceb53bb131c86..66802690bdd7bc 100644
--- a/llvm/test/Transforms/LoopVectorize/VPlan/AArch64/sve2-histcnt-vplan.ll
+++ b/llvm/test/Transforms/LoopVectorize/VPlan/AArch64/sve2-histcnt-vplan.ll
@@ -155,6 +155,6 @@ for.exit:
!0 = !{!1}
!1 = distinct !{!1, !2}
-!2 = distinct !{!2}
+!2 = distinct !{!2, i1 false}
!3 = !{!4}
!4 = distinct !{!4, !2}
diff --git a/llvm/test/Transforms/LoopVectorize/X86/interleave-cost.ll b/llvm/test/Transforms/LoopVectorize/X86/interleave-cost.ll
index aa5a0f5be24be8..ed35fe4fbceb6d 100644
--- a/llvm/test/Transforms/LoopVectorize/X86/interleave-cost.ll
+++ b/llvm/test/Transforms/LoopVectorize/X86/interleave-cost.ll
@@ -533,7 +533,7 @@ attributes #1 = { "min-legal-vector-width"="0" "target-cpu"="cascadelake" }
; CHECK: [[META2]] = !{!"llvm.loop.unroll.runtime.disable"}
; CHECK: [[META3]] = !{[[META4:![0-9]+]]}
; CHECK: [[META4]] = distinct !{[[META4]], [[META5:![0-9]+]]}
-; CHECK: [[META5]] = distinct !{[[META5]], !"LVerDomain"}
+; CHECK: [[META5]] = distinct !{[[META5]], i1 false, !"LVerDomain"}
; CHECK: [[META6]] = !{[[META7:![0-9]+]]}
; CHECK: [[META7]] = distinct !{[[META7]], [[META5]]}
; CHECK: [[META8]] = !{[[META9:![0-9]+]]}
diff --git a/llvm/test/Transforms/LoopVectorize/dead_instructions.ll b/llvm/test/Transforms/LoopVectorize/dead_instructions.ll
index ed50065a4e2516..668700366bfc25 100644
--- a/llvm/test/Transforms/LoopVectorize/dead_instructions.ll
+++ b/llvm/test/Transforms/LoopVectorize/dead_instructions.ll
@@ -260,7 +260,7 @@ exit:
; CHECK: [[LOOP4]] = distinct !{[[LOOP4]], [[META1]], [[META2]]}
; CHECK: [[META5]] = !{[[META6:![0-9]+]]}
; CHECK: [[META6]] = distinct !{[[META6]], [[META7:![0-9]+]]}
-; CHECK: [[META7]] = distinct !{[[META7]], !"LVerDomain"}
+; CHECK: [[META7]] = distinct !{[[META7]], i1 false, !"LVerDomain"}
; CHECK: [[META8]] = !{[[META9:![0-9]+]]}
; CHECK: [[META9]] = distinct !{[[META9]], [[META7]]}
; CHECK: [[LOOP10]] = distinct !{[[LOOP10]], [[META1]], [[META2]]}
diff --git a/llvm/test/Transforms/LoopVectorize/interleaved-accesses-metadata.ll b/llvm/test/Transforms/LoopVectorize/interleaved-accesses-metadata.ll
index df243aea6bbdef..5d561ebcf748c9 100644
--- a/llvm/test/Transforms/LoopVectorize/interleaved-accesses-metadata.ll
+++ b/llvm/test/Transforms/LoopVectorize/interleaved-accesses-metadata.ll
@@ -259,7 +259,7 @@ exit:
; CHECK: [[META9]] = !{!"llvm.loop.unroll.runtime.disable"}
; CHECK: [[META10]] = !{[[META11:![0-9]+]]}
; CHECK: [[META11]] = distinct !{[[META11]], [[META12:![0-9]+]]}
-; CHECK: [[META12]] = distinct !{[[META12]], !"LVerDomain"}
+; CHECK: [[META12]] = distinct !{[[META12]], i1 false, !"LVerDomain"}
; CHECK: [[META13]] = !{[[META14:![0-9]+]]}
; CHECK: [[META14]] = distinct !{[[META14]], [[META12]]}
; CHECK: [[LOOP15]] = distinct !{[[LOOP15]], [[META8]], [[META9]]}
diff --git a/llvm/test/Transforms/LoopVectorize/metadata.ll b/llvm/test/Transforms/LoopVectorize/metadata.ll
index 4cc50326cdb2d5..57c12729a6d7c4 100644
--- a/llvm/test/Transforms/LoopVectorize/metadata.ll
+++ b/llvm/test/Transforms/LoopVectorize/metadata.ll
@@ -631,7 +631,7 @@ attributes #1 = { nounwind "vector-function-abi-variant"="_ZGV_LLVM_N2v_bar(bar_
!3 = !{!"omnipotent char", !2, i64 0}
!4 = !{!5}
!5 = distinct !{!5, !6, !"g1"}
-!6 = distinct !{!6, !"t2"}
+!6 = distinct !{!6, i1 false, !"t2"}
;.
; CHECK: [[CHAR_TBAA0]] = !{[[META1:![0-9]+]], [[META1]], i64 0, i64 0}
@@ -650,13 +650,13 @@ attributes #1 = { nounwind "vector-function-abi-variant"="_ZGV_LLVM_N2v_bar(bar_
; CHECK: [[LOOP13]] = distinct !{[[LOOP13]], [[META6]], [[META5]]}
; CHECK: [[META14]] = !{[[META15:![0-9]+]]}
; CHECK: [[META15]] = distinct !{[[META15]], [[META16:![0-9]+]]}
-; CHECK: [[META16]] = distinct !{[[META16]], !"LVerDomain"}
+; CHECK: [[META16]] = distinct !{[[META16]], i1 false, !"LVerDomain"}
; CHECK: [[LOOP17]] = distinct !{[[LOOP17]], [[META5]], [[META6]]}
; CHECK: [[META18]] = !{[[META19:![0-9]+]]}
; CHECK: [[META19]] = distinct !{[[META19]], [[META16]]}
; CHECK: [[META20]] = !{[[META21:![0-9]+]], [[META15]]}
; CHECK: [[META21]] = distinct !{[[META21]], [[META22:![0-9]+]], !"g1"}
-; CHECK: [[META22]] = distinct !{[[META22]], !"t2"}
+; CHECK: [[META22]] = distinct !{[[META22]], i1 false, !"t2"}
; CHECK: [[META23]] = !{[[META21]]}
; CHECK: [[LOOP24]] = distinct !{[[LOOP24]], [[META5]]}
;.
@@ -676,13 +676,13 @@ attributes #1 = { nounwind "vector-function-abi-variant"="_ZGV_LLVM_N2v_bar(bar_
; INTERLEAVE: [[LOOP13]] = distinct !{[[LOOP13]], [[META6]], [[META5]]}
; INTERLEAVE: [[META14]] = !{[[META15:![0-9]+]]}
; INTERLEAVE: [[META15]] = distinct !{[[META15]], [[META16:![0-9]+]]}
-; INTERLEAVE: [[META16]] = distinct !{[[META16]], !"LVerDomain"}
+; INTERLEAVE: [[META16]] = distinct !{[[META16]], i1 false, !"LVerDomain"}
; INTERLEAVE: [[LOOP17]] = distinct !{[[LOOP17]], [[META5]], [[META6]]}
; INTERLEAVE: [[META18]] = !{[[META19:![0-9]+]]}
; INTERLEAVE: [[META19]] = distinct !{[[META19]], [[META16]]}
; INTERLEAVE: [[META20]] = !{[[META21:![0-9]+]], [[META15]]}
; INTERLEAVE: [[META21]] = distinct !{[[META21]], [[META22:![0-9]+]], !"g1"}
-; INTERLEAVE: [[META22]] = distinct !{[[META22]], !"t2"}
+; INTERLEAVE: [[META22]] = distinct !{[[META22]], i1 false, !"t2"}
; INTERLEAVE: [[META23]] = !{[[META21]]}
; INTERLEAVE: [[LOOP24]] = distinct !{[[LOOP24]], [[META5]]}
;.
diff --git a/llvm/test/Transforms/LoopVectorize/noalias-md.ll b/llvm/test/Transforms/LoopVectorize/noalias-md.ll
index 93dd79f428e886..3196b9e414d6fd 100644
--- a/llvm/test/Transforms/LoopVectorize/noalias-md.ll
+++ b/llvm/test/Transforms/LoopVectorize/noalias-md.ll
@@ -70,7 +70,7 @@ for.end:
; LV: !0 = !{!1}
; LV: !1 = distinct !{!1, !2}
-; LV: !2 = distinct !{!2, !"LVerDomain"}
+; LV: !2 = distinct !{!2, i1 false, !"LVerDomain"}
; LV: !3 = !{!4}
; LV: !4 = distinct !{!4, !2}
; LV: !5 = !{!1, !6}
diff --git a/llvm/test/Transforms/LoopVectorize/noalias-scope-decl-outer-loop.ll b/llvm/test/Transforms/LoopVectorize/noalias-scope-decl-outer-loop.ll
index efbfc49a218049..d3123e06d1150e 100644
--- a/llvm/test/Transforms/LoopVectorize/noalias-scope-decl-outer-loop.ll
+++ b/llvm/test/Transforms/LoopVectorize/noalias-scope-decl-outer-loop.ll
@@ -69,4 +69,4 @@ exit:
!2 = !{!"llvm.loop.vectorize.enable"}
!3 = !{!4}
!4 = distinct !{!4, !5}
-!5 = distinct !{!5}
+!5 = distinct !{!5, i1 false}
diff --git a/llvm/test/Transforms/LoopVectorize/noalias-scope-decl.ll b/llvm/test/Transforms/LoopVectorize/noalias-scope-decl.ll
index 788732f84cda17..2f70c8d9abb8df 100644
--- a/llvm/test/Transforms/LoopVectorize/noalias-scope-decl.ll
+++ b/llvm/test/Transforms/LoopVectorize/noalias-scope-decl.ll
@@ -246,14 +246,14 @@ if.end5:
!0 = !{ !1 }
!1 = distinct !{ !1, !2 }
-!2 = distinct !{ !2 }
+!2 = distinct !{!2, i1 false}
!3 = distinct !{ !3, !2 }
!4 = !{ !3 }
;.
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
-; CHECK: [[META2]] = distinct !{[[META2]]}
+; CHECK: [[META2]] = distinct !{[[META2]], i1 false}
; CHECK: [[LOOP3]] = distinct !{[[LOOP3]], [[META4:![0-9]+]], [[META5:![0-9]+]]}
; CHECK: [[META4]] = !{!"llvm.loop.isvectorized", i32 1}
; CHECK: [[META5]] = !{!"llvm.loop.unroll.runtime.disable"}
diff --git a/llvm/test/Transforms/LoopVectorize/predicate-switch.ll b/llvm/test/Transforms/LoopVectorize/predicate-switch.ll
index 3f3bb35956ceee..985c6608f8a19f 100644
--- a/llvm/test/Transforms/LoopVectorize/predicate-switch.ll
+++ b/llvm/test/Transforms/LoopVectorize/predicate-switch.ll
@@ -674,7 +674,7 @@ exit:
; IC1: [[LOOP5]] = distinct !{[[LOOP5]], [[META1]], [[META2]]}
; IC1: [[META6]] = !{[[META7:![0-9]+]]}
; IC1: [[META7]] = distinct !{[[META7]], [[META8:![0-9]+]]}
-; IC1: [[META8]] = distinct !{[[META8]], !"LVerDomain"}
+; IC1: [[META8]] = distinct !{[[META8]], i1 false, !"LVerDomain"}
; IC1: [[LOOP9]] = distinct !{[[LOOP9]], [[META1]], [[META2]]}
; IC1: [[LOOP10]] = distinct !{[[LOOP10]], [[META1]]}
;.
@@ -686,7 +686,7 @@ exit:
; IC2: [[LOOP5]] = distinct !{[[LOOP5]], [[META1]], [[META2]]}
; IC2: [[META6]] = !{[[META7:![0-9]+]]}
; IC2: [[META7]] = distinct !{[[META7]], [[META8:![0-9]+]]}
-; IC2: [[META8]] = distinct !{[[META8]], !"LVerDomain"}
+; IC2: [[META8]] = distinct !{[[META8]], i1 false, !"LVerDomain"}
; IC2: [[LOOP9]] = distinct !{[[LOOP9]], [[META1]], [[META2]]}
; IC2: [[LOOP10]] = distinct !{[[LOOP10]], [[META1]]}
;.
diff --git a/llvm/test/Transforms/LoopVectorize/replicate-region-branch-weights-merged-mem-ops.ll b/llvm/test/Transforms/LoopVectorize/replicate-region-branch-weights-merged-mem-ops.ll
index 74b42cecb554e4..df534f6fa44a72 100644
--- a/llvm/test/Transforms/LoopVectorize/replicate-region-branch-weights-merged-mem-ops.ll
+++ b/llvm/test/Transforms/LoopVectorize/replicate-region-branch-weights-merged-mem-ops.ll
@@ -250,7 +250,7 @@ exit:
; CHECK: [[PROF0]] = !{!"branch_weights", i32 1, i32 127}
; CHECK: [[META1]] = !{[[META2:![0-9]+]]}
; CHECK: [[META2]] = distinct !{[[META2]], [[META3:![0-9]+]]}
-; CHECK: [[META3]] = distinct !{[[META3]], !"LVerDomain"}
+; CHECK: [[META3]] = distinct !{[[META3]], i1 false, !"LVerDomain"}
; CHECK: [[META4]] = !{[[META5:![0-9]+]]}
; CHECK: [[META5]] = distinct !{[[META5]], [[META3]]}
; CHECK: [[META6]] = !{[[META7:![0-9]+]]}
@@ -268,7 +268,7 @@ exit:
; CHECK: [[META18]] = !{!"llvm.loop.estimated_trip_count", i32 0}
; CHECK: [[META19]] = !{[[META20:![0-9]+]]}
; CHECK: [[META20]] = distinct !{[[META20]], [[META21:![0-9]+]]}
-; CHECK: [[META21]] = distinct !{[[META21]], !"LVerDomain"}
+; CHECK: [[META21]] = distinct !{[[META21]], i1 false, !"LVerDomain"}
; CHECK: [[META22]] = !{[[META23:![0-9]+]]}
; CHECK: [[META23]] = distinct !{[[META23]], [[META21]]}
; CHECK: [[META24]] = !{[[META25:![0-9]+]]}
diff --git a/llvm/test/Transforms/LoopVectorize/runtime-check-threshold-with-force-metadata.ll b/llvm/test/Transforms/LoopVectorize/runtime-check-threshold-with-force-metadata.ll
index d4854fbcf9c75e..b642ede6cbc7d7 100644
--- a/llvm/test/Transforms/LoopVectorize/runtime-check-threshold-with-force-metadata.ll
+++ b/llvm/test/Transforms/LoopVectorize/runtime-check-threshold-with-force-metadata.ll
@@ -88,7 +88,7 @@ exit:
;.
; LIMIT1: [[META0]] = !{[[META1:![0-9]+]]}
; LIMIT1: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
-; LIMIT1: [[META2]] = distinct !{[[META2]], !"LVerDomain"}
+; LIMIT1: [[META2]] = distinct !{[[META2]], i1 false, !"LVerDomain"}
; LIMIT1: [[META3]] = !{[[META4:![0-9]+]]}
; LIMIT1: [[META4]] = distinct !{[[META4]], [[META2]]}
; LIMIT1: [[LOOP5]] = distinct !{[[LOOP5]], [[META6:![0-9]+]], [[META7:![0-9]+]]}
diff --git a/llvm/test/Transforms/LoopVectorize/scalable-noalias-scope-decl.ll b/llvm/test/Transforms/LoopVectorize/scalable-noalias-scope-decl.ll
index 9457561072a2a3..1be2a03eaa3806 100644
--- a/llvm/test/Transforms/LoopVectorize/scalable-noalias-scope-decl.ll
+++ b/llvm/test/Transforms/LoopVectorize/scalable-noalias-scope-decl.ll
@@ -113,12 +113,12 @@ for.cond.cleanup:
!0 = !{ !1 }
!1 = distinct !{ !1, !2 }
-!2 = distinct !{ !2 }
+!2 = distinct !{ !2, i1 false }
!3 = distinct !{ !3, !2 }
!4 = !{ !3 }
; CHECK: [[SCOPE0_LIST]] = !{[[SCOPE0:!.*]]}
; CHECK: [[SCOPE0]] = distinct !{[[SCOPE0]], [[SCOPE0_DOM:!.*]]}
-; CHECK: [[SCOPE0_DOM]] = distinct !{[[SCOPE0_DOM]]}
+; CHECK: [[SCOPE0_DOM]] = distinct !{[[SCOPE0_DOM]], i1 false}
; CHECK: [[SCOPE4_LIST]] = !{[[SCOPE4:!.*]]}
; CHECK: [[SCOPE4]] = distinct !{[[SCOPE4]], [[SCOPE0_DOM]]}
diff --git a/llvm/test/Transforms/LoopVectorize/select-cmp-multiuse.ll b/llvm/test/Transforms/LoopVectorize/select-cmp-multiuse.ll
index 0c810c26760ba3..1d75c47673588e 100644
--- a/llvm/test/Transforms/LoopVectorize/select-cmp-multiuse.ll
+++ b/llvm/test/Transforms/LoopVectorize/select-cmp-multiuse.ll
@@ -1646,7 +1646,7 @@ exit:
; CHECK-VF4-IC1: [[LOOP5]] = distinct !{[[LOOP5]], [[META2]], [[META1]]}
; CHECK-VF4-IC1: [[META6]] = !{[[META7:![0-9]+]]}
; CHECK-VF4-IC1: [[META7]] = distinct !{[[META7]], [[META8:![0-9]+]]}
-; CHECK-VF4-IC1: [[META8]] = distinct !{[[META8]], !"LVerDomain"}
+; CHECK-VF4-IC1: [[META8]] = distinct !{[[META8]], i1 false, !"LVerDomain"}
; CHECK-VF4-IC1: [[META9]] = !{[[META10:![0-9]+]]}
; CHECK-VF4-IC1: [[META10]] = distinct !{[[META10]], [[META8]]}
; CHECK-VF4-IC1: [[LOOP11]] = distinct !{[[LOOP11]], [[META1]], [[META2]]}
@@ -1662,7 +1662,7 @@ exit:
; CHECK-VF4-IC2: [[LOOP5]] = distinct !{[[LOOP5]], [[META2]], [[META1]]}
; CHECK-VF4-IC2: [[META6]] = !{[[META7:![0-9]+]]}
; CHECK-VF4-IC2: [[META7]] = distinct !{[[META7]], [[META8:![0-9]+]]}
-; CHECK-VF4-IC2: [[META8]] = distinct !{[[META8]], !"LVerDomain"}
+; CHECK-VF4-IC2: [[META8]] = distinct !{[[META8]], i1 false, !"LVerDomain"}
; CHECK-VF4-IC2: [[META9]] = !{[[META10:![0-9]+]]}
; CHECK-VF4-IC2: [[META10]] = distinct !{[[META10]], [[META8]]}
; CHECK-VF4-IC2: [[LOOP11]] = distinct !{[[LOOP11]], [[META1]], [[META2]]}
@@ -1678,7 +1678,7 @@ exit:
; CHECK-VF1-IC2: [[LOOP5]] = distinct !{[[LOOP5]], [[META1]]}
; CHECK-VF1-IC2: [[META6]] = !{[[META7:![0-9]+]]}
; CHECK-VF1-IC2: [[META7]] = distinct !{[[META7]], [[META8:![0-9]+]]}
-; CHECK-VF1-IC2: [[META8]] = distinct !{[[META8]], !"LVerDomain"}
+; CHECK-VF1-IC2: [[META8]] = distinct !{[[META8]], i1 false, !"LVerDomain"}
; CHECK-VF1-IC2: [[META9]] = !{[[META10:![0-9]+]]}
; CHECK-VF1-IC2: [[META10]] = distinct !{[[META10]], [[META8]]}
; CHECK-VF1-IC2: [[LOOP11]] = distinct !{[[LOOP11]], [[META1]], [[META2]]}
diff --git a/llvm/test/Transforms/LoopVectorize/unroll-novec-memcheck-metadata.ll b/llvm/test/Transforms/LoopVectorize/unroll-novec-memcheck-metadata.ll
index 67948a3882c019..83a716877d1291 100644
--- a/llvm/test/Transforms/LoopVectorize/unroll-novec-memcheck-metadata.ll
+++ b/llvm/test/Transforms/LoopVectorize/unroll-novec-memcheck-metadata.ll
@@ -11,7 +11,7 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
; CHECK-LABEL: middle.block:
; CHECK-DAG: ![[$MD1]] = !{![[MD2:[0-9]+]]}
; CHECK-DAG: ![[MD2]] = distinct !{![[MD2]], ![[MD3:[0-9]+]]}
-; CHECK-DAG: ![[MD3]] = distinct !{![[MD3]], !"LVerDomain"}
+; CHECK-DAG: ![[MD3]] = distinct !{![[MD3]], i1 false, !"LVerDomain"}
define void @test(ptr nocapture readonly %a, ptr nocapture %b) {
entry:
diff --git a/llvm/test/Transforms/LoopVersioning/add-phi-update-users.ll b/llvm/test/Transforms/LoopVersioning/add-phi-update-users.ll
index de72c3479a2942..4fc181ad6a2cf4 100644
--- a/llvm/test/Transforms/LoopVersioning/add-phi-update-users.ll
+++ b/llvm/test/Transforms/LoopVersioning/add-phi-update-users.ll
@@ -50,13 +50,13 @@ define void @f1() {
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i64 [[INC]], 3
; CHECK-NEXT: br i1 [[CMP]], label %[[FOR_BODY]], label %[[FOR_END_LOOPEXIT1:.*]]
; CHECK: [[FOR_END_LOOPEXIT]]:
-; CHECK-NEXT: [[T2_LVER_PH:%.*]] = phi i16 [ [[T2_LVER_ORIG]], %[[FOR_BODY_LVER_ORIG]] ]
+; CHECK-NEXT: [[T2_LCSSA_PH:%.*]] = phi i16 [ [[T2_LVER_ORIG]], %[[FOR_BODY_LVER_ORIG]] ]
; CHECK-NEXT: br label %[[FOR_END:.*]]
; CHECK: [[FOR_END_LOOPEXIT1]]:
-; CHECK-NEXT: [[T2_LVER_PH2:%.*]] = phi i16 [ [[T2]], %[[FOR_BODY]] ]
+; CHECK-NEXT: [[T2_LCSSA_PH2:%.*]] = phi i16 [ [[T2]], %[[FOR_BODY]] ]
; CHECK-NEXT: br label %[[FOR_END]]
; CHECK: [[FOR_END]]:
-; CHECK-NEXT: [[T2_LVER:%.*]] = phi i16 [ [[T2_LVER_PH]], %[[FOR_END_LOOPEXIT]] ], [ [[T2_LVER_PH2]], %[[FOR_END_LOOPEXIT1]] ]
+; CHECK-NEXT: [[T2_LVER:%.*]] = phi i16 [ [[T2_LCSSA_PH]], %[[FOR_END_LOOPEXIT]] ], [ [[T2_LCSSA_PH2]], %[[FOR_END_LOOPEXIT1]] ]
; CHECK-NEXT: [[TOBOOL:%.*]] = icmp eq i16 [[T2_LVER]], 0
; CHECK-NEXT: br i1 [[TOBOOL]], label %[[FOR_COND_BACKEDGE:.*]], label %[[IF_THEN:.*]]
; CHECK: [[FOR_COND_BACKEDGE]]:
@@ -108,7 +108,7 @@ if.then: ; preds = %for.end
; CHECK: [[META5]] = !{!"Simple C/C++ TBAA"}
; CHECK: [[META6]] = !{[[META7:![0-9]+]]}
; CHECK: [[META7]] = distinct !{[[META7]], [[META8:![0-9]+]]}
-; CHECK: [[META8]] = distinct !{[[META8]], !"LVerDomain"}
+; CHECK: [[META8]] = distinct !{[[META8]], i1 false, !"LVerDomain"}
; CHECK: [[META9]] = !{[[META10:![0-9]+]]}
; CHECK: [[META10]] = distinct !{[[META10]], [[META8]]}
;.
diff --git a/llvm/test/Transforms/LoopVersioning/crash-36998.ll b/llvm/test/Transforms/LoopVersioning/crash-36998.ll
index 1217d9405e9f89..1ca1a2aff0706e 100644
--- a/llvm/test/Transforms/LoopVersioning/crash-36998.ll
+++ b/llvm/test/Transforms/LoopVersioning/crash-36998.ll
@@ -58,7 +58,7 @@ for.cond.for.end_crit_edge: ; preds = %for.body
;.
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
-; CHECK: [[META2]] = distinct !{[[META2]], !"LVerDomain"}
+; CHECK: [[META2]] = distinct !{[[META2]], i1 false, !"LVerDomain"}
; CHECK: [[META3]] = !{[[META4:![0-9]+]]}
; CHECK: [[META4]] = distinct !{[[META4]], [[META2]]}
;.
diff --git a/llvm/test/Transforms/LoopVersioning/noalias-version-twice.ll b/llvm/test/Transforms/LoopVersioning/noalias-version-twice.ll
index 8a639166d41e4b..0651ade7382566 100644
--- a/llvm/test/Transforms/LoopVersioning/noalias-version-twice.ll
+++ b/llvm/test/Transforms/LoopVersioning/noalias-version-twice.ll
@@ -92,7 +92,7 @@ for.end: ; preds = %for.body
; Domain for the second loop versioning for the top loop after
; distribution.
-; CHECK: !17 = distinct !{!17, !"LVerDomain"}
+; CHECK: !17 = distinct !{!17, i1 false, !"LVerDomain"}
; CHECK: !19 = distinct !{!19, !17}
; CHECK: !20 = distinct !{!20, !17}
; CHECK: !21 = distinct !{!21, !17}
@@ -102,7 +102,7 @@ for.end: ; preds = %for.body
; CHECK: !34 = distinct !{!34, !35}
; Domain for the second loop versioning for the bottom loop after
; distribution.
-; CHECK: !35 = distinct !{!35, !"LVerDomain"}
+; CHECK: !35 = distinct !{!35, i1 false, !"LVerDomain"}
; CHECK: !36 = !{!21, !37}
; CHECK: !37 = distinct !{!37, !35}
; CHECK: !38 = !{!19, !39}
diff --git a/llvm/test/Transforms/LoopVersioning/noalias.ll b/llvm/test/Transforms/LoopVersioning/noalias.ll
index fd886eafa83ee7..c95f97c864e853 100644
--- a/llvm/test/Transforms/LoopVersioning/noalias.ll
+++ b/llvm/test/Transforms/LoopVersioning/noalias.ll
@@ -46,7 +46,7 @@ for.end: ; preds = %for.body
}
; CHECK: !0 = !{!1}
; CHECK: !1 = distinct !{!1, !2}
-; CHECK: !2 = distinct !{!2, !"LVerDomain"}
+; CHECK: !2 = distinct !{!2, i1 false, !"LVerDomain"}
; CHECK: !3 = !{!4}
; CHECK: !4 = distinct !{!4, !2}
; CHECK: !5 = !{!6}
diff --git a/llvm/test/Transforms/LoopVersioning/wrapping-pointer-non-integral-addrspace.ll b/llvm/test/Transforms/LoopVersioning/wrapping-pointer-non-integral-addrspace.ll
index e3cb3831d7938e..b856e42f091160 100644
--- a/llvm/test/Transforms/LoopVersioning/wrapping-pointer-non-integral-addrspace.ll
+++ b/llvm/test/Transforms/LoopVersioning/wrapping-pointer-non-integral-addrspace.ll
@@ -98,7 +98,7 @@ exit:
;.
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
-; CHECK: [[META2]] = distinct !{[[META2]], !"LVerDomain"}
+; CHECK: [[META2]] = distinct !{[[META2]], i1 false, !"LVerDomain"}
; CHECK: [[META3]] = !{[[META4:![0-9]+]]}
; CHECK: [[META4]] = distinct !{[[META4]], [[META2]]}
;.
diff --git a/llvm/test/Transforms/LowerInvoke/lowerinvoke.ll b/llvm/test/Transforms/LowerInvoke/lowerinvoke.ll
index 6e3e23dbbc4fc9..da55805608e14e 100644
--- a/llvm/test/Transforms/LowerInvoke/lowerinvoke.ll
+++ b/llvm/test/Transforms/LowerInvoke/lowerinvoke.ll
@@ -44,4 +44,4 @@ lpad:
!0 = !{!"branch_weights", i32 100, i32 1}
!1 = !{!2}
!2 = distinct !{!2, !3}
-!3 = distinct !{!3}
+!3 = distinct !{!3, i1 false}
diff --git a/llvm/test/Transforms/MemCpyOpt/aa-recursion-assertion-failure.ll b/llvm/test/Transforms/MemCpyOpt/aa-recursion-assertion-failure.ll
index 1b997e8c4f884a..183417f38d21f9 100644
--- a/llvm/test/Transforms/MemCpyOpt/aa-recursion-assertion-failure.ll
+++ b/llvm/test/Transforms/MemCpyOpt/aa-recursion-assertion-failure.ll
@@ -83,4 +83,4 @@ if.end5: ; preds = %if.then3, %_Z1dPcS_
!0 = !{!1}
!1 = distinct !{!1, !2, !"_Z1dPcS_l: %h"}
-!2 = distinct !{!2, !"_Z1dPcS_l"}
+!2 = distinct !{!2, i1 false, !"_Z1dPcS_l"}
diff --git a/llvm/test/Transforms/MemCpyOpt/callslot_aa.ll b/llvm/test/Transforms/MemCpyOpt/callslot_aa.ll
index 410e16f72f748d..f1b2fb601a8fb4 100644
--- a/llvm/test/Transforms/MemCpyOpt/callslot_aa.ll
+++ b/llvm/test/Transforms/MemCpyOpt/callslot_aa.ll
@@ -23,6 +23,6 @@ declare void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1)
; Check that the noalias for "dst" was removed by checking that the metadata is gone
; CHECK-NOT: "dst"
-!0 = !{!0}
+!0 = !{!0, i1 false}
!1 = distinct !{!1, !0, !"dst"}
!2 = distinct !{!1}
diff --git a/llvm/test/Transforms/MemCpyOpt/callslot_badaa.ll b/llvm/test/Transforms/MemCpyOpt/callslot_badaa.ll
index a0c0e9f5ba78a1..205f3a1e7b21ed 100644
--- a/llvm/test/Transforms/MemCpyOpt/callslot_badaa.ll
+++ b/llvm/test/Transforms/MemCpyOpt/callslot_badaa.ll
@@ -36,7 +36,7 @@ declare void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1)
!0 = !{!1}
!1 = distinct !{!1, !2, !"callee0: %a"}
-!2 = distinct !{!2, !"callee0"}
+!2 = distinct !{!2, i1 false, !"callee0"}
!3 = !{!4}
!4 = distinct !{!4, !5, !"callee1: %a"}
-!5 = distinct !{!5, !"callee1"}
+!5 = distinct !{!5, i1 false, !"callee1"}
diff --git a/llvm/test/Transforms/MemCpyOpt/callslot_noalias.ll b/llvm/test/Transforms/MemCpyOpt/callslot_noalias.ll
index 9948d3dacad5f6..aa41e5c3f1805d 100644
--- a/llvm/test/Transforms/MemCpyOpt/callslot_noalias.ll
+++ b/llvm/test/Transforms/MemCpyOpt/callslot_noalias.ll
@@ -22,5 +22,5 @@ define i8 @test(ptr writable dereferenceable(1) noalias %dst) {
!0 = !{!1}
!1 = !{!1, !2}
-!2 = !{!2}
+!2 = !{!2, i1 false}
diff --git a/llvm/test/Transforms/MemCpyOpt/load-store-to-memcpy.ll b/llvm/test/Transforms/MemCpyOpt/load-store-to-memcpy.ll
index a344cce58a5b9d..e991affad4c9ed 100644
--- a/llvm/test/Transforms/MemCpyOpt/load-store-to-memcpy.ll
+++ b/llvm/test/Transforms/MemCpyOpt/load-store-to-memcpy.ll
@@ -43,10 +43,10 @@ define void @test_memcpy_constant(ptr %d) {
; memcpy(%d, %a) should not be generated since store2 may-aliases load %a.
define void @f(ptr %a, ptr %b, ptr %c, ptr %d) {
; CHECK-LABEL: @f(
-; CHECK-NEXT: [[VAL:%.*]] = load [[T:%.*]], ptr [[A:%.*]], align 4, !alias.scope !0
-; CHECK-NEXT: store [[T]] { i8 23, i32 23 }, ptr [[B:%.*]], align 4, !alias.scope !3
-; CHECK-NEXT: store [[T]] { i8 44, i32 44 }, ptr [[C:%.*]], align 4, !alias.scope !6, !noalias !3
-; CHECK-NEXT: store [[T]] [[VAL]], ptr [[D:%.*]], align 4, !alias.scope !9, !noalias !12
+; CHECK-NEXT: [[VAL:%.*]] = load [[T:%.*]], ptr [[A:%.*]], align 4, !alias.scope [[META0:![0-9]+]]
+; CHECK-NEXT: store [[T]] { i8 23, i32 23 }, ptr [[B:%.*]], align 4, !alias.scope [[META3:![0-9]+]]
+; CHECK-NEXT: store [[T]] { i8 44, i32 44 }, ptr [[C:%.*]], align 4, !alias.scope [[META6:![0-9]+]], !noalias [[META3]]
+; CHECK-NEXT: store [[T]] [[VAL]], ptr [[D:%.*]], align 4, !alias.scope [[META9:![0-9]+]], !noalias [[META12:![0-9]+]]
; CHECK-NEXT: ret void
;
%val = load %T, ptr %a, !alias.scope !{!10}
@@ -62,10 +62,10 @@ define void @f(ptr %a, ptr %b, ptr %c, ptr %d) {
ret void
}
-!0 = !{!0}
-!1 = !{!1}
-!2 = !{!2}
-!3 = !{!3}
+!0 = !{!0, i1 false}
+!1 = !{!1, i1 false}
+!2 = !{!2, i1 false}
+!3 = !{!3, i1 false}
!10 = !{ !10, !0 }
!11 = !{ !11, !1 }
diff --git a/llvm/test/Transforms/MemCpyOpt/memcpy.ll b/llvm/test/Transforms/MemCpyOpt/memcpy.ll
index ff006a08490c88..64b3f2a50ba400 100644
--- a/llvm/test/Transforms/MemCpyOpt/memcpy.ll
+++ b/llvm/test/Transforms/MemCpyOpt/memcpy.ll
@@ -945,7 +945,7 @@ define void @prevent_memsetting_a_undef_store(ptr %result) {
-!0 = !{!0}
+!0 = !{!0, i1 false}
!1 = !{!1, !0}
!2 = !{!1}
!3 = !{!4}
diff --git a/llvm/test/Transforms/MemCpyOpt/stack-move.ll b/llvm/test/Transforms/MemCpyOpt/stack-move.ll
index cf91ea98b2a555..83cec35262c95d 100644
--- a/llvm/test/Transforms/MemCpyOpt/stack-move.ll
+++ b/llvm/test/Transforms/MemCpyOpt/stack-move.ll
@@ -246,7 +246,7 @@ define void @alias_no_mod() {
}
; Scope domain
-!0 = !{!0}
+!0 = !{!0, i1 false}
; Scope in that domain
!1 = !{!1, !0}
; Scope list
diff --git a/llvm/test/Transforms/MergeFunc/mergefunc-preserve-nonnull.ll b/llvm/test/Transforms/MergeFunc/mergefunc-preserve-nonnull.ll
index 544bba4909ea15..b68dbe43f9d9d5 100644
--- a/llvm/test/Transforms/MergeFunc/mergefunc-preserve-nonnull.ll
+++ b/llvm/test/Transforms/MergeFunc/mergefunc-preserve-nonnull.ll
@@ -73,10 +73,10 @@ define void @noalias_2(ptr %0, ptr %1) {
!0 = !{}
!1 = !{}
-!2 = !{!2}
+!2 = !{!2, i1 false}
!3 = !{!3, !2}
!4 = !{!3}
-!5 = !{!5}
+!5 = !{!5, i1 false}
!6 = !{!6, !5}
!7 = !{!6}
!8 = !DILocation(line: 1, column: 1, scope: !{})
diff --git a/llvm/test/Transforms/MergedLoadStoreMotion/preserve-store-metadata.ll b/llvm/test/Transforms/MergedLoadStoreMotion/preserve-store-metadata.ll
index 1dfdf09a269997..29d2e1410fdd45 100644
--- a/llvm/test/Transforms/MergedLoadStoreMotion/preserve-store-metadata.ll
+++ b/llvm/test/Transforms/MergedLoadStoreMotion/preserve-store-metadata.ll
@@ -88,7 +88,7 @@ return:
!8 = !{!"any pointer", !2, i64 0}
!9 = !{!10}
!10 = distinct !{!10, !11}
-!11 = distinct !{!11}
+!11 = distinct !{!11, i1 false}
!12 = distinct !{!10}
!13 = distinct !{}
!14 = distinct !{}
@@ -101,7 +101,7 @@ return:
; CHECK: [[META5]] = !{!"long", [[META2]]}
; CHECK: [[META6]] = !{[[META7:![0-9]+]]}
; CHECK: [[META7]] = distinct !{[[META7]], [[META8:![0-9]+]]}
-; CHECK: [[META8]] = distinct !{[[META8]]}
+; CHECK: [[META8]] = distinct !{[[META8]], i1 false}
; CHECK: [[ACC_GRP9]] = distinct !{}
; CHECK: [[_FOOPTR_TBAA10]] = !{[[META11:![0-9]+]], [[META11]], i64 0, i64 0}
; CHECK: [[META11]] = !{!"p2 _Foo", [[META12:![0-9]+]]}
diff --git a/llvm/test/Transforms/NewGVN/noalias.ll b/llvm/test/Transforms/NewGVN/noalias.ll
index a4fc3d1eb16e1d..0009a1ff9a2c6e 100644
--- a/llvm/test/Transforms/NewGVN/noalias.ll
+++ b/llvm/test/Transforms/NewGVN/noalias.ll
@@ -44,7 +44,7 @@ declare i32 @foo(ptr) readonly
!0 = distinct !{!0, !2, !"callee0: %a"}
!1 = distinct !{!1, !2, !"callee0: %b"}
-!2 = distinct !{!2, !"callee0"}
+!2 = distinct !{!2, i1 false, !"callee0"}
!3 = !{!0}
!4 = !{!1}
@@ -52,7 +52,7 @@ declare i32 @foo(ptr) readonly
;.
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]], !"callee0: %a"}
-; CHECK: [[META2]] = distinct !{[[META2]], !"callee0"}
+; CHECK: [[META2]] = distinct !{[[META2]], i1 false, !"callee0"}
; CHECK: [[META3]] = !{[[META4:![0-9]+]]}
; CHECK: [[META4]] = distinct !{[[META4]], [[META2]], !"callee0: %b"}
;.
diff --git a/llvm/test/Transforms/OpenMP/spmdization_guarding.ll b/llvm/test/Transforms/OpenMP/spmdization_guarding.ll
index a91a3816714cea..c8a1bfa96efc1e 100644
--- a/llvm/test/Transforms/OpenMP/spmdization_guarding.ll
+++ b/llvm/test/Transforms/OpenMP/spmdization_guarding.ll
@@ -429,7 +429,7 @@ attributes #5 = { convergent nounwind "llvm.assume"="omp_no_openmp,ompx_spmd_ame
!7 = !{!"clang version 14.0.0"}
!8 = !{!9}
!9 = distinct !{!9, !10, !"__omp_outlined__: %__context"}
-!10 = distinct !{!10, !"__omp_outlined__"}
+!10 = distinct !{!10, i1 false, !"__omp_outlined__"}
!11 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
;.
@@ -466,7 +466,7 @@ attributes #5 = { convergent nounwind "llvm.assume"="omp_no_openmp,ompx_spmd_ame
; CHECK: [[META6:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"}
; CHECK: [[META7]] = !{[[META8:![0-9]+]]}
; CHECK: [[META8]] = distinct !{[[META8]], [[META9:![0-9]+]], !"__omp_outlined__: %__context"}
-; CHECK: [[META9]] = distinct !{[[META9]], !"__omp_outlined__"}
+; CHECK: [[META9]] = distinct !{[[META9]], i1 false, !"__omp_outlined__"}
; CHECK: [[LOOP10]] = distinct !{[[LOOP10]], [[META11:![0-9]+]]}
; CHECK: [[META11]] = !{!"llvm.loop.mustprogress"}
;.
@@ -479,7 +479,7 @@ attributes #5 = { convergent nounwind "llvm.assume"="omp_no_openmp,ompx_spmd_ame
; CHECK-DISABLED: [[META6:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"}
; CHECK-DISABLED: [[META7]] = !{[[META8:![0-9]+]]}
; CHECK-DISABLED: [[META8]] = distinct !{[[META8]], [[META9:![0-9]+]], !"__omp_outlined__: %__context"}
-; CHECK-DISABLED: [[META9]] = distinct !{[[META9]], !"__omp_outlined__"}
+; CHECK-DISABLED: [[META9]] = distinct !{[[META9]], i1 false, !"__omp_outlined__"}
; CHECK-DISABLED: [[LOOP10]] = distinct !{[[LOOP10]], [[META11:![0-9]+]]}
; CHECK-DISABLED: [[META11]] = !{!"llvm.loop.mustprogress"}
;.
diff --git a/llvm/test/Transforms/PhaseOrdering/AArch64/indvars-vectorization.ll b/llvm/test/Transforms/PhaseOrdering/AArch64/indvars-vectorization.ll
index f338bec08be6d3..3e207c17855a2f 100644
--- a/llvm/test/Transforms/PhaseOrdering/AArch64/indvars-vectorization.ll
+++ b/llvm/test/Transforms/PhaseOrdering/AArch64/indvars-vectorization.ll
@@ -119,7 +119,7 @@ for.end:
;.
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
-; CHECK: [[META2]] = distinct !{[[META2]], !"LVerDomain"}
+; CHECK: [[META2]] = distinct !{[[META2]], i1 false, !"LVerDomain"}
; CHECK: [[META3]] = !{[[META4:![0-9]+]]}
; CHECK: [[META4]] = distinct !{[[META4]], [[META2]]}
; CHECK: [[LOOP5]] = distinct !{[[LOOP5]], [[META6:![0-9]+]], [[META7:![0-9]+]], [[META8:![0-9]+]]}
diff --git a/llvm/test/Transforms/PhaseOrdering/X86/loop-vectorizer-noalias.ll b/llvm/test/Transforms/PhaseOrdering/X86/loop-vectorizer-noalias.ll
index 96a7e2d4c52b33..dc396a409e3b29 100644
--- a/llvm/test/Transforms/PhaseOrdering/X86/loop-vectorizer-noalias.ll
+++ b/llvm/test/Transforms/PhaseOrdering/X86/loop-vectorizer-noalias.ll
@@ -72,5 +72,5 @@ attributes #0 = { "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87"}
;.
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]], !"acc: %val"}
-; CHECK: [[META2]] = distinct !{[[META2]], !"acc"}
+; CHECK: [[META2]] = distinct !{[[META2]], i1 false, !"acc"}
;.
diff --git a/llvm/test/Transforms/RewriteStatepointsForGC/drop-invalid-metadata.ll b/llvm/test/Transforms/RewriteStatepointsForGC/drop-invalid-metadata.ll
index 02bf2906fb7120..6dd33505a4726e 100644
--- a/llvm/test/Transforms/RewriteStatepointsForGC/drop-invalid-metadata.ll
+++ b/llvm/test/Transforms/RewriteStatepointsForGC/drop-invalid-metadata.ll
@@ -133,7 +133,7 @@ attributes #0 = { nounwind readonly }
!0 = !{i32 0, i32 2147483647}
!1 = !{}
!2 = !{i32 10, i32 1}
-!3 = !{!3}
+!3 = !{!3, i1 false}
!4 = !{!4, !3}
!5 = !{!4}
!6 = !{i64 8}
diff --git a/llvm/test/Transforms/SLPVectorizer/X86/gathered-shuffle-resized.ll b/llvm/test/Transforms/SLPVectorizer/X86/gathered-shuffle-resized.ll
index 6df57f8c6a0bbf..396fd161aa8885 100644
--- a/llvm/test/Transforms/SLPVectorizer/X86/gathered-shuffle-resized.ll
+++ b/llvm/test/Transforms/SLPVectorizer/X86/gathered-shuffle-resized.ll
@@ -174,9 +174,9 @@ bb:
!0 = !{!1}
!1 = !{!"result slice: {}", !2}
-!2 = !{!"fn AA domain"}
+!2 = !{!"fn AA domain", i1 false}
;.
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
; CHECK: [[META1]] = !{!"result slice: {}", [[META2:![0-9]+]]}
-; CHECK: [[META2]] = !{!"fn AA domain"}
+; CHECK: [[META2]] = !{!"fn AA domain", i1 false}
;.
diff --git a/llvm/test/Transforms/SROA/mem-par-metadata-sroa.ll b/llvm/test/Transforms/SROA/mem-par-metadata-sroa.ll
index dec130bd533d69..d3814493195904 100644
--- a/llvm/test/Transforms/SROA/mem-par-metadata-sroa.ll
+++ b/llvm/test/Transforms/SROA/mem-par-metadata-sroa.ll
@@ -116,7 +116,7 @@ declare void @llvm.memcpy.p0.p0.i64(ptr nocapture writeonly, ptr nocapture reado
!2 = !{!"llvm.loop.vectorize.enable"}
!3 = !{!4}
!4 = distinct !{!4, !5, !"_ZNK7ComplexplERKS_: %agg.result"}
-!5 = distinct !{!5, !"_ZNK7ComplexplERKS_"}
+!5 = distinct !{!5, i1 false, !"_ZNK7ComplexplERKS_"}
!11 = distinct !{}
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
; CHECK-MODIFY-CFG: {{.*}}
diff --git a/llvm/test/Transforms/Util/combine-alias-scope-metadata.ll b/llvm/test/Transforms/Util/combine-alias-scope-metadata.ll
index 1e8e8b516567ed..70484b65f8c97d 100644
--- a/llvm/test/Transforms/Util/combine-alias-scope-metadata.ll
+++ b/llvm/test/Transforms/Util/combine-alias-scope-metadata.ll
@@ -15,7 +15,7 @@ define void @test(ptr noalias dereferenceable(1) %in, ptr noalias dereferenceabl
declare void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1)
-!0 = !{!0}
+!0 = !{!0, i1 false}
!1 = distinct !{!1, !0, !"in"}
!2 = distinct !{!2, !0, !"tmp"}
!3 = distinct !{!3, !0, !"tmp2"}
diff --git a/llvm/test/Transforms/VectorCombine/alias.ll b/llvm/test/Transforms/VectorCombine/alias.ll
index 0fb09d1b351030..e670e95922c559 100644
--- a/llvm/test/Transforms/VectorCombine/alias.ll
+++ b/llvm/test/Transforms/VectorCombine/alias.ll
@@ -5,13 +5,13 @@ define <4 x i32> @quux(ptr addrspace(3) %arg) {
; CHECK-LABEL: define <4 x i32> @quux(
; CHECK-SAME: ptr addrspace(3) [[ARG:%.*]]) {
; CHECK-NEXT: [[BB:.*:]]
-; CHECK-NEXT: [[EXTRACTELEMENT:%.*]] = load i8, ptr addrspace(3) [[ARG]], align 4, !tbaa [[TBAA0:![0-9]+]], !alias.scope [[META0:![0-9]+]], !noalias [[META0]]
+; CHECK-NEXT: [[EXTRACTELEMENT:%.*]] = load i8, ptr addrspace(3) [[ARG]], align 4, !tbaa [[TBAA0:![0-9]+]], !alias.scope [[META4:![0-9]+]], !noalias [[META4]]
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds <4 x i8>, ptr addrspace(3) [[ARG]], i64 0, i64 1
-; CHECK-NEXT: [[EXTRACTELEMENT1:%.*]] = load i8, ptr addrspace(3) [[TMP0]], align 1, !tbaa [[TBAA0]], !alias.scope [[META0]], !noalias [[META0]]
+; CHECK-NEXT: [[EXTRACTELEMENT1:%.*]] = load i8, ptr addrspace(3) [[TMP0]], align 1, !tbaa [[TBAA0]], !alias.scope [[META4]], !noalias [[META4]]
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds <4 x i8>, ptr addrspace(3) [[ARG]], i64 0, i64 2
-; CHECK-NEXT: [[EXTRACTELEMENT2:%.*]] = load i8, ptr addrspace(3) [[TMP1]], align 2, !tbaa [[TBAA0]], !alias.scope [[META0]], !noalias [[META0]]
+; CHECK-NEXT: [[EXTRACTELEMENT2:%.*]] = load i8, ptr addrspace(3) [[TMP1]], align 2, !tbaa [[TBAA0]], !alias.scope [[META4]], !noalias [[META4]]
; CHECK-NEXT: [[TMP2:%.*]] = getelementptr inbounds <4 x i8>, ptr addrspace(3) [[ARG]], i64 0, i64 3
-; CHECK-NEXT: [[EXTRACTELEMENT3:%.*]] = load i8, ptr addrspace(3) [[TMP2]], align 1, !tbaa [[TBAA0]], !alias.scope [[META0]], !noalias [[META0]]
+; CHECK-NEXT: [[EXTRACTELEMENT3:%.*]] = load i8, ptr addrspace(3) [[TMP2]], align 1, !tbaa [[TBAA0]], !alias.scope [[META4]], !noalias [[META4]]
; CHECK-NEXT: [[ZEXT:%.*]] = zext i8 [[EXTRACTELEMENT]] to i32
; CHECK-NEXT: [[ZEXT4:%.*]] = zext i8 [[EXTRACTELEMENT1]] to i32
; CHECK-NEXT: [[ZEXT5:%.*]] = zext i8 [[EXTRACTELEMENT2]] to i32
@@ -41,16 +41,15 @@ bb:
!0 = !{!1}
!1 = distinct !{!1, !2}
-!2 = distinct !{!2}
+!2 = distinct !{!2, i1 false}
!3 = !{!"Simple C/C++ TBAA"}
!4 = !{!"omnipotent char", !3, i64 0}
!5 = !{!"i8", !4, i64 0}
;.
-; CHECK: [[TBAA0]] = !{[[META3:![0-9]+]], [[META3]], i64 0, i64 0}
-; CHECK: [[META3]] = !{!"i8", [[META4:![0-9]+]]}
-; CHECK: [[META4]] = !{!"omnipotent char", [[META5:![0-9]+]], i64 0}
-; CHECK: [[META5]] = !{!"Simple C/C++ TBAA"}
-; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
-; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]]}
-; CHECK: [[META2]] = distinct !{[[META2]]}
-;.
+; CHECK: [[TBAA0]] = !{[[META1:![0-9]+]], [[META1]], i64 0, i64 0}
+; CHECK: [[META1]] = !{!"i8", [[META2:![0-9]+]]}
+; CHECK: [[META2]] = !{!"omnipotent char", [[META3:![0-9]+]], i64 0}
+; CHECK: [[META3]] = !{!"Simple C/C++ TBAA"}
+; CHECK: [[META4]] = !{[[META5:![0-9]+]]}
+; CHECK: [[META5]] = distinct !{[[META5]], [[META6:![0-9]+]]}
+; CHECK: [[META6]] = distinct !{[[META6]], i1 false}
diff --git a/llvm/test/Verifier/alias-scope-metadata.ll b/llvm/test/Verifier/alias-scope-metadata.ll
index e1672346a183f1..765d82a2c9705b 100644
--- a/llvm/test/Verifier/alias-scope-metadata.ll
+++ b/llvm/test/Verifier/alias-scope-metadata.ll
@@ -9,8 +9,11 @@ define void @test(ptr %p) {
load i8, ptr %p, !noalias !9
load i8, ptr %p, !noalias !11
load i8, ptr %p, !noalias !14
- load i8, ptr %p, !alias.scope !17
- call void @llvm.experimental.noalias.scope.decl(metadata !20)
+ load i8, ptr %p, !noalias !17
+ load i8, ptr %p, !noalias !20
+ load i8, ptr %p, !noalias !23
+ load i8, ptr %p, !alias.scope !26
+ call void @llvm.experimental.noalias.scope.decl(metadata !29)
ret void
}
@@ -39,23 +42,37 @@ declare void @llvm.experimental.noalias.scope.decl(metadata)
!9 = !{!10}
!10 = !{!10, !"str"}
-; CHECK: domain must have one or two operands
+; CHECK: domain must have two or three operands
!11 = !{!12}
!12 = !{!12, !13}
!13 = !{}
-; CHECK: domain must have one or two operands
+; CHECK: domain must have two or three operands
!14 = !{!15}
!15 = !{!15, !16}
-!16 = !{!17, !18, !19}
+!16 = !{!16, i1 false, !"str", !"str"}
; CHECK: first domain operand must be self-referential or string
!17 = !{!18}
!18 = !{!18, !19}
-!19 = !{!20}
+!19 = !{!13, i1 false}
-; CHECK: second domain operand must be string (if used)
+; CHECK: second domain operand must be an i1 constant
!20 = !{!21}
!21 = !{!21, !22}
-!22 = !{!22, !23}
-!23 = !{}
+!22 = !{!22, i32 1}
+
+; CHECK: second domain operand must be an i1 constant
+!23 = !{!24}
+!24 = !{!24, !25}
+!25 = !{!25, !"str", !"str"}
+
+; CHECK: third domain operand must be string (if used)
+!26 = !{!27}
+!27 = !{!27, !28}
+!28 = !{!28, i1 false, !13}
+
+; CHECK: domain must have two or three operands
+!29 = !{!30}
+!30 = !{!30, !31}
+!31 = !{!31, i1 false, !"str", !"str"}
diff --git a/llvm/test/Verifier/noalias_scope_decl.ll b/llvm/test/Verifier/noalias_scope_decl.ll
index b457c5129dd57d..d45f654422d908 100644
--- a/llvm/test/Verifier/noalias_scope_decl.ll
+++ b/llvm/test/Verifier/noalias_scope_decl.ll
@@ -54,7 +54,7 @@ attributes #1 = { inaccessiblememonly nounwind }
!1 = !{!"clang"}
!2 = !{!3}
!3 = distinct !{!3, !4, !"test: pA"}
-!4 = distinct !{!4, !"test"}
+!4 = distinct !{!4, i1 false, !"test"}
!5 = !{!3, !3}
!6 = !{!3}
!7 = distinct !{!7, !4, !"test: pB"}
diff --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/dot_value_in_metadata_string.ll b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/dot_value_in_metadata_string.ll
index 844a1087b61cf4..5016becf2f6335 100644
--- a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/dot_value_in_metadata_string.ll
+++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/dot_value_in_metadata_string.ll
@@ -8,4 +8,4 @@ define i32 @dot_value_and_metadata_string(ptr %p, i32 %n) {
!0 = !{!1}
!1 = distinct !{!1, !2, !"callee: %.arg"}
-!2 = distinct !{!2, !"callee"}
+!2 = distinct !{!2, i1 false, !"callee"}
diff --git a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/dot_value_in_metadata_string.ll.expected b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/dot_value_in_metadata_string.ll.expected
index 2fc57109e00d0f..066c256d55b2d3 100644
--- a/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/dot_value_in_metadata_string.ll.expected
+++ b/llvm/test/tools/UpdateTestChecks/update_test_checks/Inputs/dot_value_in_metadata_string.ll.expected
@@ -14,9 +14,9 @@ define i32 @dot_value_and_metadata_string(ptr %p, i32 %n) {
!0 = !{!1}
!1 = distinct !{!1, !2, !"callee: %.arg"}
-!2 = distinct !{!2, !"callee"}
+!2 = distinct !{!2, i1 false, !"callee"}
;.
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
; CHECK: [[META1]] = distinct !{[[META1]], [[META2:![0-9]+]], !"callee: %.arg"}
-; CHECK: [[META2]] = distinct !{[[META2]], !"callee"}
+; CHECK: [[META2]] = distinct !{[[META2]], i1 false, !"callee"}
;.
diff --git a/llvm/test/tools/llubi/noalias_scope.ll b/llvm/test/tools/llubi/noalias_scope.ll
index 1cd764b957d253..ec5e13366ef721 100644
--- a/llvm/test/tools/llubi/noalias_scope.ll
+++ b/llvm/test/tools/llubi/noalias_scope.ll
@@ -9,7 +9,7 @@ entry:
!0 = !{!1}
!1 = distinct !{!1, !2, !"func: %agg.result"}
-!2 = distinct !{!2, !"func"}
+!2 = distinct !{!2, i1 false, !"func"}
; CHECK: Entering function: main
; CHECK-NEXT: tail call void @llvm.experimental.noalias.scope.decl(metadata !{{[0-9]+}})
; CHECK-NEXT: ret void
diff --git a/llvm/unittests/MIR/MachineMetadata.cpp b/llvm/unittests/MIR/MachineMetadata.cpp
index c611cf062bf6be..824ded5f207b55 100644
--- a/llvm/unittests/MIR/MachineMetadata.cpp
+++ b/llvm/unittests/MIR/MachineMetadata.cpp
@@ -265,7 +265,7 @@ body: |
std::string Output = print([&](raw_ostream &OS) { printMIR(OS, MMI, *MF); });
std::string CheckString = R"(
CHECK: machineMetadataNodes:
-CHECK-DAG: ![[MMDOMAIN:[0-9]+]] = distinct !{!{{[0-9]+}}, !"domain"}
+CHECK-DAG: ![[MMDOMAIN:[0-9]+]] = distinct !{!{{[0-9]+}}, i1 false, !"domain"}
CHECK-DAG: ![[MMSCOPE0:[0-9]+]] = distinct !{!{{[0-9]+}}, ![[MMDOMAIN]], !"scope0"}
CHECK-DAG: ![[MMSCOPE1:[0-9]+]] = distinct !{!{{[0-9]+}}, ![[MMDOMAIN]], !"scope1"}
CHECK-DAG: ![[MMSET0:[0-9]+]] = !{![[MMSCOPE0]]}
@@ -475,7 +475,7 @@ body: |
std::string Output = print([&](raw_ostream &OS) { printMIR(OS, MMI, *MF); });
std::string CheckString = R"(
CHECK: machineMetadataNodes:
-CHECK-DAG: ![[MMDOMAIN:[0-9]+]] = distinct !{!{{[0-9]+}}, !"domain"}
+CHECK-DAG: ![[MMDOMAIN:[0-9]+]] = distinct !{!{{[0-9]+}}, i1 false, !"domain"}
CHECK-DAG: ![[MMSCOPE0:[0-9]+]] = distinct !{!{{[0-9]+}}, ![[MMDOMAIN]], !"scope0"}
CHECK-DAG: ![[MMSCOPE1:[0-9]+]] = distinct !{!{{[0-9]+}}, ![[MMDOMAIN]], !"scope1"}
CHECK-DAG: ![[MMSET0:[0-9]+]] = !{![[MMSCOPE0]]}
@@ -579,7 +579,7 @@ body: |
std::string Output = print([&](raw_ostream &OS) { printMIR(OS, MMI, *MF); });
std::string CheckString = R"(
CHECK: machineMetadataNodes:
-CHECK-DAG: ![[MMDOMAIN:[0-9]+]] = distinct !{!{{[0-9]+}}, !"domain"}
+CHECK-DAG: ![[MMDOMAIN:[0-9]+]] = distinct !{!{{[0-9]+}}, i1 false, !"domain"}
CHECK-DAG: ![[MMSCOPE0:[0-9]+]] = distinct !{!{{[0-9]+}}, ![[MMDOMAIN]], !"scope0"}
CHECK-DAG: ![[MMSCOPE1:[0-9]+]] = distinct !{!{{[0-9]+}}, ![[MMDOMAIN]], !"scope1"}
CHECK-DAG: ![[MMSET0:[0-9]+]] = !{![[MMSCOPE0]]}
diff --git a/mlir/lib/Target/LLVMIR/ModuleImport.cpp b/mlir/lib/Target/LLVMIR/ModuleImport.cpp
index ce6da7b1b6c3d2..0dc25450be935d 100644
--- a/mlir/lib/Target/LLVMIR/ModuleImport.cpp
+++ b/mlir/lib/Target/LLVMIR/ModuleImport.cpp
@@ -577,9 +577,9 @@ ModuleImport::processAliasScopeMetadata(const llvm::MDNode *node) {
// Helper that creates an alias scope domain attribute.
auto createAliasScopeDomainOp = [&](const llvm::MDNode *aliasDomain) {
StringAttr description = nullptr;
- if (aliasDomain->getNumOperands() >= 2)
- if (auto *operand = dyn_cast<llvm::MDString>(aliasDomain->getOperand(1)))
- description = builder.getStringAttr(operand->getString());
+ StringRef name = llvm::AliasScopeDomainNode(aliasDomain).getName();
+ if (!name.empty())
+ description = builder.getStringAttr(name);
Attribute idAttr = getIdAttr(aliasDomain);
return builder.getAttr<AliasScopeDomainAttr>(idAttr, description);
};
@@ -598,7 +598,7 @@ ModuleImport::processAliasScopeMetadata(const llvm::MDNode *node) {
!verifyDescription(scope, 2))
return emitError(loc) << "unsupported alias scope node: "
<< diagMD(scope, llvmModule.get());
- if (!verifySelfRefOrString(domain) || !verifyDescription(domain, 1))
+ if (!verifySelfRefOrString(domain) || !verifyDescription(domain, 2))
return emitError(loc) << "unsupported alias domain node: "
<< diagMD(domain, llvmModule.get());
diff --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
index ee088aefcb2c45..1664648281fcf3 100644
--- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
@@ -2329,9 +2329,11 @@ ModuleTranslation::getOrCreateAliasScope(AliasScopeAttr aliasScopeAttr) {
auto [domainIt, insertedDomain] = aliasDomainMetadataMapping.try_emplace(
aliasScopeAttr.getDomain(), nullptr);
if (insertedDomain) {
- llvm::SmallVector<llvm::Metadata *, 2> operands;
+ llvm::SmallVector<llvm::Metadata *, 3> operands;
// Placeholder for potential self-reference.
operands.push_back(dummy.get());
+ operands.push_back(
+ llvm::ConstantAsMetadata::get(llvm::ConstantInt::getFalse(ctx)));
if (StringAttr description = aliasScopeAttr.getDomain().getDescription())
operands.push_back(llvm::MDString::get(ctx, description));
domainIt->second = llvm::MDNode::get(ctx, operands);
diff --git a/mlir/test/Target/LLVMIR/Import/import-failure.ll b/mlir/test/Target/LLVMIR/Import/import-failure.ll
index 9015eff87a8c76..3a35150884b5e4 100644
--- a/mlir/test/Target/LLVMIR/Import/import-failure.ll
+++ b/mlir/test/Target/LLVMIR/Import/import-failure.ll
@@ -251,7 +251,7 @@ declare void @llvm.experimental.noalias.scope.decl(metadata)
!0 = !{!1}
!1 = !{!1, !2}
-!2 = distinct !{!2, !"The domain"}
+!2 = distinct !{!2, i1 false, !"The domain"}
; // -----
diff --git a/mlir/test/Target/LLVMIR/Import/metadata-alias-scopes.ll b/mlir/test/Target/LLVMIR/Import/metadata-alias-scopes.ll
index bf4c85786216fd..fcdbcfcc7e499c 100644
--- a/mlir/test/Target/LLVMIR/Import/metadata-alias-scopes.ll
+++ b/mlir/test/Target/LLVMIR/Import/metadata-alias-scopes.ll
@@ -22,7 +22,7 @@ define void @alias_scope(ptr %arg1) {
ret void
}
-!0 = distinct !{!0, !"The domain"}
+!0 = distinct !{!0, i1 false, !"The domain"}
!1 = distinct !{!1, !0, !"The first scope"}
!2 = distinct !{!2, !0}
!3 = distinct !{!3, !0}
@@ -49,8 +49,8 @@ define void @two_domains(ptr %arg1) {
ret void
}
-!0 = distinct !{!0, !"The domain"}
-!1 = distinct !{!1}
+!0 = distinct !{!0, i1 false, !"The domain"}
+!1 = distinct !{!1, i1 false}
!2 = !{!2, !0}
!3 = !{!3, !1}
!4 = !{!2}
@@ -89,7 +89,7 @@ declare void @llvm.memcpy.p0.p0.i32(ptr noalias nocapture writeonly, ptr noalias
declare void @llvm.memset.p0.i32(ptr nocapture writeonly, i8, i32, i1 immarg)
declare void @foo(ptr %arg1)
-!0 = distinct !{!0, !"The domain"}
+!0 = distinct !{!0, i1 false, !"The domain"}
!1 = !{!1, !0}
!2 = !{!1}
@@ -117,7 +117,7 @@ define void @alias_scope(ptr %arg1) {
ret void
}
-!0 = !{!"domain1"}
+!0 = !{!"domain1", i1 false}
!1 = !{!"scopeid1", !0, !"The first scope"}
!2 = !{!"scopeid2", !0}
!3 = !{!"scopeid3", !0}
diff --git a/mlir/test/Target/LLVMIR/attribute-alias-scopes.mlir b/mlir/test/Target/LLVMIR/attribute-alias-scopes.mlir
index 09d781fbbb4044..0966ea3e837958 100644
--- a/mlir/test/Target/LLVMIR/attribute-alias-scopes.mlir
+++ b/mlir/test/Target/LLVMIR/attribute-alias-scopes.mlir
@@ -38,7 +38,7 @@ llvm.func @alias_scopes(%arg1 : !llvm.ptr) {
// CHECK-DAG: declare void @llvm.memset.p0.i32(ptr writeonly captures(none), i8, i32, i1 immarg)
// Check the translated metadata.
-// CHECK-DAG: ![[DOMAIN:[0-9]+]] = distinct !{![[DOMAIN]], !"The domain"}
+// CHECK-DAG: ![[DOMAIN:[0-9]+]] = distinct !{![[DOMAIN]], i1 false, !"The domain"}
// CHECK-DAG: ![[SCOPE1:[0-9]+]] = distinct !{![[SCOPE1]], ![[DOMAIN]], !"The first scope"}
// CHECK-DAG: ![[SCOPE2:[0-9]+]] = distinct !{![[SCOPE2]], ![[DOMAIN]]}
// CHECK-DAG: ![[SCOPE3:[0-9]+]] = distinct !{![[SCOPE3]], ![[DOMAIN]]}
@@ -66,7 +66,7 @@ llvm.func @noalias_intr_only() {
}
// Check the translated metadata.
-// CHECK-DAG: ![[DOMAIN:[0-9]+]] = distinct !{![[DOMAIN]], !"The domain"}
+// CHECK-DAG: ![[DOMAIN:[0-9]+]] = distinct !{![[DOMAIN]], i1 false, !"The domain"}
// CHECK-DAG: ![[SCOPE:[0-9]+]] = distinct !{![[SCOPE]], ![[DOMAIN]]}
// CHECK-DAG: ![[SCOPES]] = !{![[SCOPE]]}
@@ -99,7 +99,7 @@ llvm.func @self_reference() {
// Check that the translated subroutine types do not reference the access group
// domain since both of them are created as metadata list with a null entry.
-// CHECK-DAG: ![[DOMAIN:[0-9]+]] = distinct !{![[DOMAIN]]}
+// CHECK-DAG: ![[DOMAIN:[0-9]+]] = distinct !{![[DOMAIN]], i1 false}
// CHECK-DAG: ![[SCOPE:[0-9]+]] = distinct !{![[SCOPE]], ![[DOMAIN]]}
// CHECK-DAG: ![[SCOPES]] = !{![[SCOPE]]}
// CHECK-DAG: = !DISubroutineType(types: ![[TYPES:[0-9]+]])
@@ -145,7 +145,7 @@ llvm.func @alias_scopes(%arg1 : !llvm.ptr) {
// CHECK-DAG: declare void @llvm.memset.p0.i32(ptr writeonly captures(none), i8, i32, i1 immarg)
// Check the translated metadata.
-// CHECK-DAG: ![[DOMAIN:[0-9]+]] = !{!"domain1", !"The domain"}
+// CHECK-DAG: ![[DOMAIN:[0-9]+]] = !{!"domain1", i1 false, !"The domain"}
// CHECK-DAG: ![[SCOPE1:[0-9]+]] = !{!"scope1", ![[DOMAIN]], !"The first scope"}
// CHECK-DAG: ![[SCOPE2:[0-9]+]] = !{!"scope2", ![[DOMAIN]]}
// CHECK-DAG: ![[SCOPE3:[0-9]+]] = !{!"scope3", ![[DOMAIN]]}
diff --git a/polly/lib/CodeGen/IRBuilder.cpp b/polly/lib/CodeGen/IRBuilder.cpp
index b461b72170c776..da1cd9edd58b17 100644
--- a/polly/lib/CodeGen/IRBuilder.cpp
+++ b/polly/lib/CodeGen/IRBuilder.cpp
@@ -60,7 +60,9 @@ void ScopAnnotator::buildAliasScopes(Scop &S) {
SE = S.getSE();
LLVMContext &Ctx = SE->getContext();
- AliasScopeDomain = getID(Ctx, MDString::get(Ctx, "polly.alias.scope.domain"));
+ AliasScopeDomain =
+ getID(Ctx, ConstantAsMetadata::get(ConstantInt::getFalse(Ctx)),
+ MDString::get(Ctx, "polly.alias.scope.domain"));
AliasScopeMap.clear();
OtherAliasScopeListMap.clear();
diff --git a/polly/test/CodeGen/MemAccess/create_arrays.ll b/polly/test/CodeGen/MemAccess/create_arrays.ll
index 29eaff8ad3fabe..529e113d59ae15 100644
--- a/polly/test/CodeGen/MemAccess/create_arrays.ll
+++ b/polly/test/CodeGen/MemAccess/create_arrays.ll
@@ -37,7 +37,7 @@
; CODEGEN: !3 = distinct !{!3, !1}
; CODEGEN: !4 = !{!5}
; CODEGEN: !5 = distinct !{!5, !6, !"polly.alias.scope.E"}
-; CODEGEN: !6 = distinct !{!6, !"polly.alias.scope.domain"}
+; CODEGEN: !6 = distinct !{!6, i1 false, !"polly.alias.scope.domain"}
; CODEGEN: !7 = !{!8, !9, !10, !11}
; CODEGEN: !8 = distinct !{!8, !6, !"polly.alias.scope.MemRef_B"}
; CODEGEN: !9 = distinct !{!9, !6, !"polly.alias.scope.MemRef_A"}
diff --git a/polly/test/CodeGen/annotated_alias_scopes.ll b/polly/test/CodeGen/annotated_alias_scopes.ll
index 1f3a07b5519bef..85b12afe324ab4 100644
--- a/polly/test/CodeGen/annotated_alias_scopes.ll
+++ b/polly/test/CodeGen/annotated_alias_scopes.ll
@@ -14,7 +14,7 @@
; SCOPES: !1 = !{!"llvm.loop.vectorize.disable"}
; SCOPES: !2 = !{!3}
; SCOPES: !3 = distinct !{!3, !4, !"polly.alias.scope.MemRef_B"}
-; SCOPES: !4 = distinct !{!4, !"polly.alias.scope.domain"}
+; SCOPES: !4 = distinct !{!4, i1 false, !"polly.alias.scope.domain"}
; SCOPES: !5 = !{!6, !7}
; SCOPES: !6 = distinct !{!6, !4, !"polly.alias.scope.MemRef_C"}
; SCOPES: !7 = distinct !{!7, !4, !"polly.alias.scope.MemRef_A"}
diff --git a/polly/test/CodeGen/invariant_load_alias_metadata.ll b/polly/test/CodeGen/invariant_load_alias_metadata.ll
index 2a704ee9c576af..3d27da187026f6 100644
--- a/polly/test/CodeGen/invariant_load_alias_metadata.ll
+++ b/polly/test/CodeGen/invariant_load_alias_metadata.ll
@@ -7,7 +7,7 @@
;
; CHECK: !0 = !{!1}
; CHECK-NEXT: !1 = distinct !{!1, !2, !"polly.alias.scope.MemRef_A"}
-; CHECK-NEXT: !2 = distinct !{!2, !"polly.alias.scope.domain"}
+; CHECK-NEXT: !2 = distinct !{!2, i1 false, !"polly.alias.scope.domain"}
; CHECK-NEXT: !3 = !{!4}
; CHECK-NEXT: !4 = distinct !{!4, !2, !"polly.alias.scope.MemRef_ptrA"}
;
diff --git a/polly/test/CodeGen/scev-backedgetaken.ll b/polly/test/CodeGen/scev-backedgetaken.ll
index df416f3d6f63e5..78e480fac341e9 100644
--- a/polly/test/CodeGen/scev-backedgetaken.ll
+++ b/polly/test/CodeGen/scev-backedgetaken.ll
@@ -47,5 +47,5 @@ for.cond.cleanup.loopexit:
; CHECK: !1 = !{!"llvm.loop.vectorize.disable"}
; CHECK: !2 = !{!3}
; CHECK: !3 = distinct !{!3, !4, !"polly.alias.scope.MemRef_d"}
-; CHECK: !4 = distinct !{!4, !"polly.alias.scope.domain"}
+; CHECK: !4 = distinct !{!4, i1 false, !"polly.alias.scope.domain"}
; CHECK: !5 = !{}
>From 61b5976bd95c0f43528b6b8b5965ebc403935e56 Mon Sep 17 00:00:00 2001
From: Krzysztof Drewniak <Krzysztof.Drewniak at amd.com>
Date: Thu, 27 Aug 2026 17:06:58 +0000
Subject: [PATCH 2/6] Review feedback
---
llvm/docs/LangRef.md | 17 ++++++++----
llvm/include/llvm/Analysis/ScopedNoAliasAA.h | 3 ++-
llvm/lib/Analysis/ScopedNoAliasAA.cpp | 28 ++++++++++----------
3 files changed, 28 insertions(+), 20 deletions(-)
diff --git a/llvm/docs/LangRef.md b/llvm/docs/LangRef.md
index 5ab20d0644a85b..5ba1f6b733bd5c 100644
--- a/llvm/docs/LangRef.md
+++ b/llvm/docs/LangRef.md
@@ -7611,6 +7611,13 @@ subset of (or equal to) the set of scopes for that domain in another
instruction's `noalias` list, then the two memory accesses are assumed not to
alias.
+If a domain is declared as having disjoint scopes, two memory accesses are
+assumed not to alias if the they both have entries for that domain in their
+`alias.scope` list and their `alias.scope` lists have no scopes in common for that
+domain. Equivalently, an instruction with a set of scopes from a disjoint-scope
+domain in its `alias.scope` list implicitly has all other scopes in that domain
+in its `noalias` set.
+
Because scopes in one domain don't affect scopes in other domains, separate
domains can be used to compose multiple independent noalias sets. This is
used for example during inlining. As the noalias function parameters are
@@ -13900,7 +13907,7 @@ This instruction requires several arguments:
```llvm
declare void @take_byval(ptr byval(i64))
declare void @take_ptr(ptr)
-
+
; Invalid (assuming @take_ptr dereferences the pointer), because %local
; may be de-allocated before the call to @take_ptr.
define void @invalid_alloca() {
@@ -13909,7 +13916,7 @@ This instruction requires several arguments:
tail call void @take_ptr(ptr %local)
ret void
}
-
+
; Valid, the byval attribute causes the memory allocated by %local to be
; copied into @take_byval's stack frame.
define void @byval_alloca() {
@@ -13918,7 +13925,7 @@ This instruction requires several arguments:
tail call void @take_byval(ptr byval(i64) %local)
ret void
}
-
+
; Invalid, because @use_global_va_list uses the variadic arguments from
; @invalid_va_list.
%struct.va_list = type { ptr }
@@ -13934,14 +13941,14 @@ This instruction requires several arguments:
tail call void @use_global_va_list()
ret void
}
-
+
; Valid, byval argument forwarded to tail call as another byval argument.
define void @forward_byval(ptr byval(i64) %x) {
entry:
tail call void @take_byval(ptr byval(i64) %x)
ret void
}
-
+
; Invalid (assuming @take_ptr dereferences the pointer), byval argument
; passed to tail callee as non-byval ptr.
define void @invalid_byval(ptr byval(i64) %x) {
diff --git a/llvm/include/llvm/Analysis/ScopedNoAliasAA.h b/llvm/include/llvm/Analysis/ScopedNoAliasAA.h
index 98cc3161f7f538..481b8cadbd3978 100644
--- a/llvm/include/llvm/Analysis/ScopedNoAliasAA.h
+++ b/llvm/include/llvm/Analysis/ScopedNoAliasAA.h
@@ -54,7 +54,8 @@ class ScopedNoAliasAAResult : public AAResultBase {
LLVM_ABI static void
collectScopedDomains(const MDNode *NoAlias,
- SmallPtrSetImpl<const MDNode *> &Domains);
+ SmallPtrSetImpl<const MDNode *> &Domains,
+ bool DisjointOnly = false);
LLVM_ABI static bool mayAliasInScopes(const MDNode *Scopes,
const MDNode *NoAlias);
diff --git a/llvm/lib/Analysis/ScopedNoAliasAA.cpp b/llvm/lib/Analysis/ScopedNoAliasAA.cpp
index f005f6ac927f38..5623bc2919388d 100644
--- a/llvm/lib/Analysis/ScopedNoAliasAA.cpp
+++ b/llvm/lib/Analysis/ScopedNoAliasAA.cpp
@@ -25,14 +25,17 @@
// ... = load %ptr1, !alias.scope !{ !scope1 }
// ... = load %ptr2, !alias.scope !{ !scope1, !scope2 }, !noalias !{ !scope1 }
//
-// When evaluating an aliasing query, if one of the instructions is associated
+// When evaluating an aliasing query, if one of the instructions
// has a set of noalias scopes in some domain that is a superset of the alias
// scopes in that domain of some other instruction, then the two memory
// accesses are assumed not to alias.
//
-// A domain can also declare its scopes to be disjoint, in which case tagging
-// an instruction with an alias scope from that domain implicitly tags it with
-// a noalias set containing every other scope in that domain:
+// If a domain is declared as having disjoint scopes, two memory accesses are
+// assumed not to alias if the they both have entries for that domain in their
+// `alias.scope` list and their `alias.scope` lists have no scopes in common for
+// that domain. Equivalently, an instruction with a set of scopes from a
+// disjoint-scope domain in its `alias.scope` list implicitly has all other
+// scopes in that domain in its `noalias` set. For example,
//
// !dom1 = metadata !{ metadata !dom1, i1 true, metadata !"disjoint domain" }
// !scope3 = metadata !{ metadata !scope3, metadata !dom1 }
@@ -166,14 +169,16 @@ static void collectMDInDomain(const MDNode *List, const MDNode *Domain,
/// Collect the set of scoped domains relevant to the noalias scopes.
void ScopedNoAliasAAResult::collectScopedDomains(
- const MDNode *NoAlias, SmallPtrSetImpl<const MDNode *> &Domains) {
+ const MDNode *NoAlias, SmallPtrSetImpl<const MDNode *> &Domains,
+ bool DisjointOnly) {
if (!NoAlias)
return;
assert(Domains.empty() && "Domains should be empty");
for (const MDOperand &MDOp : NoAlias->operands())
if (const MDNode *NAMD = dyn_cast<MDNode>(MDOp))
if (const MDNode *Domain = AliasScopeNode(NAMD).getDomain())
- Domains.insert(Domain);
+ if (!DisjointOnly || AliasScopeDomainNode(Domain).hasDisjointScopes())
+ Domains.insert(Domain);
}
bool ScopedNoAliasAAResult::mayAliasInScopes(const MDNode *Scopes,
@@ -211,15 +216,10 @@ bool ScopedNoAliasAAResult::mayAliasInDisjointDomains(const MDNode *Scopes1,
// Collect the domains with disjoint scopes that the first access is in.
SmallPtrSet<const MDNode *, 16> Domains;
- for (const MDOperand &MDOp : Scopes1->operands())
- if (const MDNode *MD = dyn_cast<MDNode>(MDOp))
- if (const MDNode *Domain = AliasScopeNode(MD).getDomain())
- if (AliasScopeDomainNode(Domain).hasDisjointScopes())
- Domains.insert(Domain);
+ collectScopedDomains(Scopes1, Domains, /*DisjointOnly=*/true);
- // Each access is implicitly noalias with every scope of such a domain it is
- // not itself in, so the accesses don't alias if, for some domain, they have
- // no scope in common.
+ // The accesses don't alias if, for some domain, both accesses use at lesat
+ // one of its scopes and have no scopes in that domain in common.
for (const MDNode *Domain : Domains) {
SmallPtrSet<const MDNode *, 16> Nodes2;
collectMDInDomain(Scopes2, Domain, Nodes2);
>From e5de866fa91f73c7ca539f49fd77deebfd42da6c Mon Sep 17 00:00:00 2001
From: Krzysztof Drewniak <Krzysztof.Drewniak at amd.com>
Date: Thu, 27 Aug 2026 18:19:45 +0000
Subject: [PATCH 3/6] Add a warning about string names on disjoint
---
llvm/docs/LangRef.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/llvm/docs/LangRef.md b/llvm/docs/LangRef.md
index 5ba1f6b733bd5c..309e641c0765c8 100644
--- a/llvm/docs/LangRef.md
+++ b/llvm/docs/LangRef.md
@@ -7639,6 +7639,10 @@ instruction's `!alias.scope` list. This makes it unnecessary to spell out the
complement of each scope when a group of N pointers is known to be mutually
non-aliasing.
+String names should not be used with disjoint-scope domains, as they will be
+uniqued accross different invocations of the same function, and this is unlikely
+to be desirable behavior.
+
The metadata identifying each scope is also itself a list containing two or
three entries. The first entry is the name of the scope. Note that if the name
is a string then it can be combined across functions and translation units. A
>From 0fc28da3431a5c2e20dc2dd79b69963e109c70f6 Mon Sep 17 00:00:00 2001
From: Krzysztof Drewniak <Krzysztof.Drewniak at amd.com>
Date: Thu, 10 Sep 2026 22:44:28 +0000
Subject: [PATCH 4/6] Update docs
---
llvm/docs/LangRef.md | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/llvm/docs/LangRef.md b/llvm/docs/LangRef.md
index 309e641c0765c8..1973dc273ae10a 100644
--- a/llvm/docs/LangRef.md
+++ b/llvm/docs/LangRef.md
@@ -7616,7 +7616,9 @@ assumed not to alias if the they both have entries for that domain in their
`alias.scope` list and their `alias.scope` lists have no scopes in common for that
domain. Equivalently, an instruction with a set of scopes from a disjoint-scope
domain in its `alias.scope` list implicitly has all other scopes in that domain
-in its `noalias` set.
+in its `noalias` set. This removes the need to spell out the complement of each
+alias scope when there is a set of N objects that mutually don't alias each other,
+simplifying the IR and reducing its size for this straightforward case.
Because scopes in one domain don't affect scopes in other domains, separate
domains can be used to compose multiple independent noalias sets. This is
@@ -7632,13 +7634,6 @@ entry is an `i1` constant that marks the domain as having disjoint scopes when
it is `true`. A descriptive string may optionally be provided as a third list
entry.
-If an alias scope domain has disjoint scopes, tagging an instruction with an
-`alias.scope` within that domain implicitly tags that instruction with a
-`noalias` set containing all scopes in that domain not present in the
-instruction's `!alias.scope` list. This makes it unnecessary to spell out the
-complement of each scope when a group of N pointers is known to be mutually
-non-aliasing.
-
String names should not be used with disjoint-scope domains, as they will be
uniqued accross different invocations of the same function, and this is unlikely
to be desirable behavior.
@@ -7698,8 +7693,10 @@ And, with a domain whose scopes are disjoint,
!6 = !{!2, !3}
!7 = !{!1, !3}
-; These two instructions don't alias, because tagging them with !1 and !2
-; implicitly tags them with !noalias !6 and !noalias !7, respectively:
+; These two instructions don't alias, because tagging them with !4 and !5
+; means that they are both tagged with scopes from a disjoint domain (!1 and !2,
+; respectively) and have no scoes from that domain in common. This is equivalent
+; to tagging them them with !noalias !6 and !noalias !7, respectively:
%0 = load float, ptr %a, align 4, !alias.scope !4
store float %0, ptr %b, align 4, !alias.scope !5
>From e363f15d97b6bd025cadf9839cfe474568cb9666 Mon Sep 17 00:00:00 2001
From: Krzysztof Drewniak <Krzysztof.Drewniak at amd.com>
Date: Mon, 14 Sep 2026 17:19:11 +0000
Subject: [PATCH 5/6] Update tests for rebase
---
.../Analysis/ScopedNoAliasAA/disjoint-domains.ll | 12 ++++++------
llvm/test/CodeGen/SystemZ/Large/branch-01.ll | 6 +++---
.../test/Transforms/LoopVectorize/VPlan/cse-loads.ll | 2 +-
.../ScalarizeMaskedMemIntrin/X86/metadata.ll | 4 ++--
.../LLVMIR/Import/masked-intrinsic-metadata.ll | 2 +-
.../Target/LLVMIR/masked-intrinsic-metadata.mlir | 2 +-
6 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/llvm/test/Analysis/ScopedNoAliasAA/disjoint-domains.ll b/llvm/test/Analysis/ScopedNoAliasAA/disjoint-domains.ll
index 9b807d0fe85e44..1d2b88a5821779 100644
--- a/llvm/test/Analysis/ScopedNoAliasAA/disjoint-domains.ll
+++ b/llvm/test/Analysis/ScopedNoAliasAA/disjoint-domains.ll
@@ -7,7 +7,7 @@ entry:
%arrayidx.i = getelementptr inbounds float, ptr %a, i64 5
store float %0, ptr %arrayidx.i, align 4, !alias.scope !4
-; CHECK: NoAlias: %0 = load float, ptr %c, align 4, !alias.scope !0 <-> store float %0, ptr %arrayidx.i, align 4, !alias.scope !3
+; CHECK: NoAlias: %0 = load float, ptr %c, align 4, !alias.scope !{{[0-9]+}} <-> store float %0, ptr %arrayidx.i, align 4, !alias.scope !{{[0-9]+}}
ret void
}
@@ -20,9 +20,9 @@ entry:
%arrayidx.i2 = getelementptr inbounds float, ptr %a, i64 15
store float %0, ptr %arrayidx.i2, align 4, !alias.scope !5
-; CHECK: MayAlias: %0 = load float, ptr %c, align 4, !alias.scope !0 <-> store float %0, ptr %arrayidx.i, align 4, !alias.scope !4
-; CHECK: NoAlias: %0 = load float, ptr %c, align 4, !alias.scope !0 <-> store float %0, ptr %arrayidx.i2, align 4, !alias.scope !5
-; CHECK: NoAlias: store float %0, ptr %arrayidx.i2, align 4, !alias.scope !5 <-> store float %0, ptr %arrayidx.i, align 4, !alias.scope !4
+; CHECK: MayAlias: %0 = load float, ptr %c, align 4, !alias.scope !{{[0-9]+}} <-> store float %0, ptr %arrayidx.i, align 4, !alias.scope !{{[0-9]+}}
+; CHECK: NoAlias: %0 = load float, ptr %c, align 4, !alias.scope !{{[0-9]+}} <-> store float %0, ptr %arrayidx.i2, align 4, !alias.scope !{{[0-9]+}}
+; CHECK: NoAlias: store float %0, ptr %arrayidx.i2, align 4, !alias.scope !{{[0-9]+}} <-> store float %0, ptr %arrayidx.i, align 4, !alias.scope !{{[0-9]+}}
ret void
}
@@ -33,7 +33,7 @@ entry:
%arrayidx.i = getelementptr inbounds float, ptr %a, i64 5
store float %0, ptr %arrayidx.i, align 4, !alias.scope !10
-; CHECK: MayAlias: %0 = load float, ptr %c, align 4, !alias.scope !0 <-> store float %0, ptr %arrayidx.i, align 4, !alias.scope !3
+; CHECK: MayAlias: %0 = load float, ptr %c, align 4, !alias.scope !{{[0-9]+}} <-> store float %0, ptr %arrayidx.i, align 4, !alias.scope !{{[0-9]+}}
ret void
}
@@ -44,7 +44,7 @@ entry:
%arrayidx.i = getelementptr inbounds float, ptr %a, i64 5
store float %0, ptr %arrayidx.i, align 4, !alias.scope !13
-; CHECK: MayAlias: %0 = load float, ptr %c, align 4, !alias.scope !0 <-> store float %0, ptr %arrayidx.i, align 4, !alias.scope !3
+; CHECK: MayAlias: %0 = load float, ptr %c, align 4, !alias.scope !{{[0-9]+}} <-> store float %0, ptr %arrayidx.i, align 4, !alias.scope !{{[0-9]+}}
ret void
}
diff --git a/llvm/test/CodeGen/SystemZ/Large/branch-01.ll b/llvm/test/CodeGen/SystemZ/Large/branch-01.ll
index 482b19a17fd684..687965c2cdb79e 100644
--- a/llvm/test/CodeGen/SystemZ/Large/branch-01.ll
+++ b/llvm/test/CodeGen/SystemZ/Large/branch-01.ll
@@ -11876,9 +11876,9 @@ attributes #4 = { nounwind }
!0 = !{!"clang version 7.0.0"}
!1 = !{!2, !4}
!2 = distinct !{!2, !3, !"func_62: %agg.result"}
-!3 = distinct !{!3, !"func_62"}
+!3 = distinct !{!3, i1 false, !"func_62"}
!4 = distinct !{!4, !5, !"func_1: %agg.result"}
-!5 = distinct !{!5, !"func_1"}
+!5 = distinct !{!5, i1 false, !"func_1"}
!6 = !{!7, !9, i64 4}
!7 = !{!"S9", !8, i64 0, !9, i64 4, !11, i64 6, !8, i64 8, !12, i64 12}
!8 = !{!"int", !9, i64 0}
@@ -11891,7 +11891,7 @@ attributes #4 = { nounwind }
!15 = !{!8, !8, i64 0}
!16 = !{!17, !4}
!17 = distinct !{!17, !18, !"func_32: %agg.result"}
-!18 = distinct !{!18, !"func_32"}
+!18 = distinct !{!18, i1 false, !"func_32"}
!19 = !{!9, !9, i64 0}
!20 = !{!11, !11, i64 0}
!21 = !{!22, !22, i64 0}
diff --git a/llvm/test/Transforms/LoopVectorize/VPlan/cse-loads.ll b/llvm/test/Transforms/LoopVectorize/VPlan/cse-loads.ll
index 34dbaef2b17a06..ac24a162d5028a 100644
--- a/llvm/test/Transforms/LoopVectorize/VPlan/cse-loads.ll
+++ b/llvm/test/Transforms/LoopVectorize/VPlan/cse-loads.ll
@@ -779,7 +779,7 @@ exit:
!0 = !{!1}
!1 = distinct !{!1, !2, !"scope_a"}
-!2 = distinct !{!2, !"domain"}
+!2 = distinct !{!2, i1 false, !"domain"}
!3 = !{!4}
!4 = distinct !{!4, !2, !"scope_b"}
!5 = !{!6, !6, i64 0}
diff --git a/llvm/test/Transforms/ScalarizeMaskedMemIntrin/X86/metadata.ll b/llvm/test/Transforms/ScalarizeMaskedMemIntrin/X86/metadata.ll
index 59b1895deb92d5..22142eecf3e3c6 100644
--- a/llvm/test/Transforms/ScalarizeMaskedMemIntrin/X86/metadata.ll
+++ b/llvm/test/Transforms/ScalarizeMaskedMemIntrin/X86/metadata.ll
@@ -370,7 +370,7 @@ declare <2 x float> @llvm.masked.load.v2f32.p0(ptr, i32, <2 x i1>, <2 x float>)
!5 = !{!"ScalarizeMaskedMemIntrin metadata"}
!6 = !{!7}
!7 = distinct !{!7, !8, !"scope"}
-!8 = distinct !{!8, !"domain"}
+!8 = distinct !{!8, i1 false, !"domain"}
!9 = distinct !{}
!10 = !{!"test", !"relaxed"}
!11 = !{i32 1}
@@ -410,7 +410,7 @@ declare <2 x float> @llvm.masked.load.v2f32.p0(ptr, i32, <2 x i1>, <2 x float>)
; CHECK: [[META8]] = !{}
; CHECK: [[META9]] = !{[[META10:![0-9]+]]}
; CHECK: [[META10]] = distinct !{[[META10]], [[META11:![0-9]+]], !"scope"}
-; CHECK: [[META11]] = distinct !{[[META11]], !"domain"}
+; CHECK: [[META11]] = distinct !{[[META11]], i1 false, !"domain"}
; CHECK: [[META12]] = !{i32 1}
; CHECK: [[META13]] = distinct !{}
; CHECK: [[META14]] = !{!"test.annotation"}
diff --git a/mlir/test/Target/LLVMIR/Import/masked-intrinsic-metadata.ll b/mlir/test/Target/LLVMIR/Import/masked-intrinsic-metadata.ll
index bf812efc72571f..1293d7004f24ad 100644
--- a/mlir/test/Target/LLVMIR/Import/masked-intrinsic-metadata.ll
+++ b/mlir/test/Target/LLVMIR/Import/masked-intrinsic-metadata.ll
@@ -61,4 +61,4 @@ declare void @llvm.masked.scatter.v7f32.v7p0(<7 x float>, <7 x ptr>, <7 x i1>)
!6 = distinct !{!6, !9, !"scope"}
!7 = !{!8}
!8 = distinct !{!8, !9, !"noalias"}
-!9 = distinct !{!9, !"domain"}
+!9 = distinct !{!9, i1 false, !"domain"}
diff --git a/mlir/test/Target/LLVMIR/masked-intrinsic-metadata.mlir b/mlir/test/Target/LLVMIR/masked-intrinsic-metadata.mlir
index 6ef0fa4a183afd..ee783f896f2d73 100644
--- a/mlir/test/Target/LLVMIR/masked-intrinsic-metadata.mlir
+++ b/mlir/test/Target/LLVMIR/masked-intrinsic-metadata.mlir
@@ -63,7 +63,7 @@ llvm.func @masked_gather_scatter_metadata(%ptrs: vector<7 x !llvm.ptr>, %mask: v
// CHECK-DAG: ![[TBAA_ROOT]] = !{!"Simple C/C++ TBAA"}
// CHECK-DAG: ![[$SCOPE1]] = !{![[SCOPE1_DECL:[0-9]+]]}
// CHECK-DAG: ![[SCOPE1_DECL]] = distinct !{![[SCOPE1_DECL]], ![[DOMAIN:[0-9]+]], !"The first scope"}
-// CHECK-DAG: ![[DOMAIN]] = distinct !{![[DOMAIN]], !"The domain"}
+// CHECK-DAG: ![[DOMAIN]] = distinct !{![[DOMAIN]], i1 false, !"The domain"}
// CHECK-DAG: ![[$SCOPE2]] = !{![[SCOPE2_DECL:[0-9]+]]}
// CHECK-DAG: ![[SCOPE2_DECL]] = distinct !{![[SCOPE2_DECL]], ![[DOMAIN]], !"The second scope"}
// CHECK-DAG: ![[$AG]] = distinct !{}
>From 84ce0807954a645ca8f668d0442dcf721c91ec90 Mon Sep 17 00:00:00 2001
From: Krzysztof Drewniak <Krzysztof.Drewniak at amd.com>
Date: Wed, 16 Sep 2026 22:47:46 +0000
Subject: [PATCH 6/6] Update tests introduced recently
---
llvm/test/Transforms/LICM/scalar-promote-aa-tags.ll | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/llvm/test/Transforms/LICM/scalar-promote-aa-tags.ll b/llvm/test/Transforms/LICM/scalar-promote-aa-tags.ll
index 468cc9d554f6c5..be2d87a4fc90d4 100644
--- a/llvm/test/Transforms/LICM/scalar-promote-aa-tags.ll
+++ b/llvm/test/Transforms/LICM/scalar-promote-aa-tags.ll
@@ -414,7 +414,7 @@ exit:
!3 = !{!5, !5, i64 0}
!4 = !{!"int", !1}
!5 = !{!"float", !1}
-!6 = !{!6}
+!6 = !{!6, i1 false}
!7 = !{!7, !6}
!8 = !{!7}
!9 = !{!10, !10, i64 0}
@@ -430,5 +430,5 @@ exit:
; CHECK: [[META7]] = !{!"unsigned int", [[META2]]}
; CHECK: [[META8]] = !{[[META9:![0-9]+]]}
; CHECK: [[META9]] = distinct !{[[META9]], [[META10:![0-9]+]]}
-; CHECK: [[META10]] = distinct !{[[META10]]}
+; CHECK: [[META10]] = distinct !{[[META10]], i1 false}
;.
More information about the llvm-commits
mailing list