[llvm-branch-commits] [clang] [llvm] [mlir] [polly] [IR] Add alias scope domains with disjoint scopes (PR #218768)

Krzysztof Drewniak via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Aug 25 21:38:50 PDT 2026


https://github.com/krzysz00 updated https://github.com/llvm/llvm-project/pull/218768

>From 4ca9b8dc8d526a3d31b4c16634dbd6b493d97024 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] [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 16ff84cff5894..a7d218ac8ba15 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 7f12598f71ff8..d8430db209b05 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 d4bf8217d4eaf..b754cdcbce143 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 76dcad0b19a42..e4f98484a28fc 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 ac758261c80e1..66e43835d99bb 100644
--- a/llvm/docs/LangRef.md
+++ b/llvm/docs/LangRef.md
@@ -7595,11 +7595,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
@@ -7612,8 +7621,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}
@@ -7641,6 +7650,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
@@ -25764,7 +25797,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 76536ea1ab573..98cc3161f7f53 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 e88de73567c35..1b60fd7cb7306 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 5b458fa14f0b1..8baafe8a604b9 100644
--- a/llvm/include/llvm/IR/Metadata.h
+++ b/llvm/include/llvm/IR/Metadata.h
@@ -1585,6 +1585,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 4a0f8b6d1605d..f005f6ac927f3 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 bf8f6d12ce5a8..9a5b518034b4d 100644
--- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
+++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
@@ -6993,6 +6993,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 8b7beb1a8ff9e..6e973ddc608ae 100644
--- a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
+++ b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
@@ -337,6 +337,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 {
@@ -462,6 +523,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;
 
@@ -800,6 +865,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);
 
@@ -2635,6 +2723,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;
@@ -2752,3 +2845,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 bab855ca63591..04efa4836dea5 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 0723598342c23..896d04049bedb 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 9a8e417b43ba7..93314a2bdc0bb 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 7b78acc5aba56..1e4709bde60d0 100644
--- a/llvm/lib/IR/Verifier.cpp
+++ b/llvm/lib/IR/Verifier.cpp
@@ -5569,14 +5569,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 b877f79a000cf..4254384308e0c 100644
--- a/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
+++ b/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
@@ -5977,6 +5977,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) {
@@ -5984,17 +5988,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) {
@@ -6008,9 +6024,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 b53226f6974a8..e2a67814c2292 100644
--- a/llvm/lib/Transforms/Utils/CloneFunction.cpp
+++ b/llvm/lib/Transforms/Utils/CloneFunction.cpp
@@ -1157,6 +1157,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)) {
@@ -1170,7 +1184,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 a0a319ae3e683..4293f6d35dad5 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 6c9f5363e2371..a270ed78f3fa8 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 773ef494a51b6..a477a4f1198a6 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 f2117123ab8eb..8024c761292e0 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 e454f110e0ee3..1173c604ea0bf 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 fb296f5089422..a94c10c484ed2 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 c17b78c920eaf..0c2dc859b0ca0 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 36d79f9e44b96..3d74cc82f05a5 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 96fceee2bcfc6..0842d1be5fd24 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 0a16a11e007d5..36d57f53a73a3 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 b17f4e1a25fb8..c37fae214f47e 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 0000000000000..9b807d0fe85e4
--- /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 0ac6fa2fe2fac..bb7a069ed221b 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 fdf7b4ee0ebd2..e45b252a12949 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 0000000000000..b32604a572b3b
--- /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 8548f63bd1150..677b1d7de1c6a 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll
@@ -2482,7 +2482,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 cc27fd75a8b20..880830e14f36f 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 6b2a8c5aaf8b8..6bf12acd6ee27 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 89b3b8906f7d2..4bc19e955cd2b 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 a958563be4007..081a1bb71e287 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 c336d5d370621..0fc6b5c0d7e83 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 3abeae4c34fa1..b166549089f34 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 b68e65bd75b8d..63e664bbab67a 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 9c0db2953580c..3db67d59632f0 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 f7ef3dfc64f65..0ba0ca8f98511 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 cd7faa9e917fe..3c886db948a81 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 e14ee60611236..3754fc33733a8 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 8815be9549af2..e3665bf93e5d7 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 754c5286573ba..89ea8441459b0 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 722eb1c073fb8..8cf56c65bead6 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 b401cb5961855..0990f92266567 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 a7c9a55eafa08..ae4fa6f13fe6b 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 81bf7ffb210de..40cddfb0b2dc5 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 dc9c8373f9c17..1aaaf2cd3e7ed 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 591a2bd599087..55f0278bbf434 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 fc28a73a5541c..812a79e6000ad 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 a27e50fb2931c..f01ed6cfbb20b 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 69b89a680ff5a..ed837a54404f1 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 a0764ae25b492..7708e6db0d360 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 9570f8b98c468..173f8573597f1 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 !5, !noalias !8, 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 !10, !noalias !11, 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 !3, !noalias !0, 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 !5, !noalias !8, 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 !10, !noalias !11, 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 !3, !noalias !0, 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 47929752f1af8..5c4806a039664 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 !5, !noalias !8)
-    ; CHECK: [[MOV64rm1:%[0-9]+]]:gr64 = MOV64rm [[COPY1]], 1, $noreg, 24, $noreg :: (load (s64) from %ir.p1 + 8, align 4, !alias.scope !5, !noalias !8)
-    ; CHECK: MOV64mr [[COPY1]], 1, $noreg, 8, $noreg, killed [[MOV64rm1]] :: (store (s64) into %ir.p0 + 8, align 4, !alias.scope !10, !noalias !11)
-    ; CHECK: MOV64mr [[COPY1]], 1, $noreg, 0, $noreg, killed [[MOV64rm]] :: (store (s64) into %ir.p0, align 4, !alias.scope !10, !noalias !11)
-    ; CHECK: [[MOV32rm:%[0-9]+]]:gr32 = MOV32rm [[COPY]], 1, $noreg, 0, $noreg :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)
-    ; CHECK: [[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: $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 !5, !noalias !8)
-    ; CHECK: [[MOV64rm1:%[0-9]+]]:gr64 = MOV64rm [[COPY1]], 1, $noreg, 24, $noreg :: (load (s64) from %ir.p1 + 8, align 4, !alias.scope !5, !noalias !8)
-    ; CHECK: MOV64mr [[COPY1]], 1, $noreg, 8, $noreg, killed [[MOV64rm1]] :: (store (s64) into %ir.p0 + 8, align 4, !alias.scope !10, !noalias !11)
-    ; CHECK: MOV64mr [[COPY1]], 1, $noreg, 0, $noreg, killed [[MOV64rm]] :: (store (s64) into %ir.p0, align 4, !alias.scope !10, !noalias !11)
-    ; CHECK: [[MOV32rm:%[0-9]+]]:gr32 = MOV32rm [[COPY]], 1, $noreg, 0, $noreg :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)
-    ; CHECK: [[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: $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 !5, !noalias !8)
-    ; CHECK: [[MOV64rm1:%[0-9]+]]:gr64 = MOV64rm [[COPY1]], 1, $noreg, 24, $noreg :: (load (s64) from %ir.p1 + 8, align 1, !alias.scope !5, !noalias !8)
-    ; CHECK: MOV64mr [[COPY1]], 1, $noreg, 8, $noreg, killed [[MOV64rm1]] :: (store (s64) into %ir.p0 + 8, align 1, !alias.scope !10, !noalias !11)
-    ; CHECK: MOV64mr [[COPY1]], 1, $noreg, 0, $noreg, killed [[MOV64rm]] :: (store (s64) into %ir.p0, align 1, !alias.scope !10, !noalias !11)
-    ; CHECK: [[MOV32rm:%[0-9]+]]:gr32 = MOV32rm [[COPY]], 1, $noreg, 0, $noreg :: (load (s32) from %ir.q, !alias.scope !3, !noalias !0)
-    ; CHECK: [[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: $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 60a5a4b192aed..9a31bfb0ffa8a 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 38d183e3b24c9..3de5ac59a5c72 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 fd76475d6a5bc..cb463f63e24d7 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 89bdfbc2bd96d..ddd61bd9e0bbb 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 faff3b5dcf5d6..9d4184ee6e3b7 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 6d721fb49dabc..5ecd9926ccc6a 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 73975649dbd96..c84bbe4cbc039 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 0f00f812f9f2d..944c19e79fae9 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 bb7c90eae3ecd..dd9e1e92b75b1 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 825b7b1467a13..2d6e99c02f7d2 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 76785b22b1bf4..8afddc3421301 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 f229ab1a6e34f..16e2c2812fc39 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 d3b86786a630c..6116e6c6e9f0c 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 8a8f53c4f5bdb..cf637aa8651c9 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 a9371cd7b0886..075046138dfdc 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 911f90c8e06c9..233aa31b43cb4 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 3dd4d9c6cca7f..a63fbee0a6e6d 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 cb4c829e31e99..262c5af614ac7 100644
--- a/llvm/test/Transforms/AggressiveInstCombine/AArch64/or-load.ll
+++ b/llvm/test/Transforms/AggressiveInstCombine/AArch64/or-load.ll
@@ -1224,7 +1224,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 d8ab24c7b7eb1..5ee9c8328d4c9 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 ef7e44fcf775b..04bfcf191b79d 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 8fa9b5419ec79..ff501cd9eefc5 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 f8801378b2305..58fc3a5542fa2 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 f38c7d7b4aacc..0f908153e0733 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 a9ca0f9ec8c0b..fdda2388f9821 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 6b20bd6662f86..8e27a1ac0e225 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 f28023d270946..5e84f8119e6c2 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 67f7f58543aa8..1ae70ee2fa8d3 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 d8bf1567d00ed..958cdc51ac305 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 c85c3a4ada3bf..9b05303b3dfcb 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 4b055f102c8a5..2e432a7f71e85 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 b67579b82bb22..3d71e359a4140 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 18a65b9876412..3634463a8c0e5 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 4673daefa4db2..633b5046d3d25 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 bbfc03bf2bef7..18b9ebe1c77be 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 948ed8f76ed39..ddb22e1dfdb80 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 09835cb75b780..1a0900271d508 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 974e87a53fd9a..ef0e5fcf394cf 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 fcf1e3870afd0..60b0dce2bcad5 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 b9054363fe08a..6bea881539d80 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 29813d18458c6..34bb285aa8cf8 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 e1798f474b4ba..071e53335add1 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 85868da11db35..dd02c80fe849e 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 3f5dac8bf0f45..c25f97d658071 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 dc399b67c4a17..598c64bfe04cb 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 c456d0f5ed21b..baeb925058e6f 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 3de4c2dd8df15..b50cdfc207226 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 f8e8ab85f935a..d258e521d7c3d 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 0000000000000..20bd94bdf221f
--- /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 be3c33e528c54..078cfad85811a 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 f0c2e8c8845cf..dd49fdeecbc51 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 48bedc72c2d31..a1ebd0786b0c5 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 b4979017b67e8..f5d83b83f87a5 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 cb10168547d2a..712a3090e182c 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 a3dfa91195343..cb3e4589b1e9d 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 92839f1d19968..6cfcc8a4ff958 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 f25cb966a37fc..efe5d74650f4b 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 b818442f994fc..a4b87a2da5e46 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 ba02fbb72e710..72f796957c664 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 be57f3072c6b9..94fe6cdd91ab0 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 354537acf1218..473082c83f46a 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 5a73e7b31ca54..1c58c13408f45 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 0f3b71df94270..8b8dfa0f48daf 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 d867a574110b2..16c5fbe3dbcf3 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 f9c1b365a6b2b..da7613be31247 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 2753bad5e1c1e..091e1c4b7a177 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 2dbc77aa756f6..7043eeabe1268 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 731a2e055e4dc..c88d1e5d6d348 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 661f8062ae268..f9ed2170d1652 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 d6b2414b426d8..e765ff71aa2a3 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 4d2ed1d17fde0..9bab8fcd46e54 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 839bdbd541e4b..60355f740f8f3 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 6399878655ed1..034c0435e12d9 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 533240f48967f..bff0b827e5467 100644
--- a/llvm/test/Transforms/LoopVectorize/AArch64/predicated-costs.ll
+++ b/llvm/test/Transforms/LoopVectorize/AArch64/predicated-costs.ll
@@ -500,7 +500,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 7ba5eb17bdc27..7acd0440d5c4b 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 ca92a8e372ea1..2c8d2f25c64bc 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 7ee772d8f1b7c..2ac2f3619a4dd 100644
--- a/llvm/test/Transforms/LoopVectorize/RISCV/blocks-with-dead-instructions.ll
+++ b/llvm/test/Transforms/LoopVectorize/RISCV/blocks-with-dead-instructions.ll
@@ -557,7 +557,7 @@ attributes #0 = { "target-features"="+64bit,+v" }
 ; 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 648bd292a1e2c..c1ad03811b4bd 100644
--- a/llvm/test/Transforms/LoopVectorize/RISCV/dead-ops-cost.ll
+++ b/llvm/test/Transforms/LoopVectorize/RISCV/dead-ops-cost.ll
@@ -388,14 +388,14 @@ attributes #0 = { "target-features"="+64bit,+v" }
 ; 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 90320cb70fd34..56cf2779a744b 100644
--- a/llvm/test/Transforms/LoopVectorize/RISCV/induction-costs.ll
+++ b/llvm/test/Transforms/LoopVectorize/RISCV/induction-costs.ll
@@ -244,7 +244,7 @@ attributes #1 = { "target-cpu"="sifive-p670" }
 ;.
 ; 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 314ec3d7a51d0..60dba3d959d17 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 f24d7b4632eee..3c6a006dbe249 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 1f02c3f4906b7..8904d1bb3e574 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 06d74a77bb0e3..9d97399f09eba 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
@@ -91,7 +91,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 dca4f47738309..b3ab395508d3b 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 bceb53bb131c8..66802690bdd7b 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 aa5a0f5be24be..ed35fe4fbceb6 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 2bbc76a6480f4..37638194455de 100644
--- a/llvm/test/Transforms/LoopVectorize/dead_instructions.ll
+++ b/llvm/test/Transforms/LoopVectorize/dead_instructions.ll
@@ -188,7 +188,7 @@ loop:
 ; 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 df243aea6bbde..5d561ebcf748c 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 4cc50326cdb2d..57c12729a6d7c 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 93dd79f428e88..3196b9e414d6f 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 efbfc49a21804..d3123e06d1150 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 788732f84cda1..2f70c8d9abb8d 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 3f3bb35956cee..985c6608f8a19 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 74b42cecb554e..df534f6fa44a7 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 d4854fbcf9c75..b642ede6cbc7d 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 9457561072a2a..1be2a03eaa380 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 23ae1d645f16c..b5e0d6acde593 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 67948a3882c01..83a716877d129 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 de72c3479a294..4fc181ad6a2cf 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 1217d9405e9f8..1ca1a2aff0706 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 8a639166d41e4..0651ade738256 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 fd886eafa83ee..c95f97c864e85 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 e3cb3831d7938..b856e42f09116 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 6e3e23dbbc4fc..da55805608e14 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 1b997e8c4f884..183417f38d21f 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 410e16f72f748..f1b2fb601a8fb 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 a0c0e9f5ba78a..205f3a1e7b21e 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 9948d3dacad5f..aa41e5c3f1805 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 a344cce58a5b9..e991affad4c9e 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 49c7807ecea3e..d9d4b8834465f 100644
--- a/llvm/test/Transforms/MemCpyOpt/memcpy.ll
+++ b/llvm/test/Transforms/MemCpyOpt/memcpy.ll
@@ -941,7 +941,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 cf91ea98b2a55..83cec35262c95 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 544bba4909ea1..b68dbe43f9d9d 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 1dfdf09a26999..29d2e1410fdd4 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 a4fc3d1eb16e1..0009a1ff9a2c6 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 2fb1f878cce7b..6c35d60add7f3 100644
--- a/llvm/test/Transforms/OpenMP/spmdization_guarding.ll
+++ b/llvm/test/Transforms/OpenMP/spmdization_guarding.ll
@@ -431,7 +431,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"}
 ;.
@@ -468,7 +468,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"}
 ;.
@@ -481,7 +481,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 f338bec08be6d..3e207c17855a2 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 96a7e2d4c52b3..dc396a409e3b2 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 02bf2906fb712..6dd33505a4726 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 6df57f8c6a0bb..396fd161aa888 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 dec130bd533d6..d381449319590 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 1e8e8b516567e..70484b65f8c97 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 0fb09d1b35103..e670e95922c55 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 e1672346a183f..765d82a2c9705 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 6fbb9ffa66080..97ce17abf627b 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 844a1087b61cf..5016becf2f633 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 2fc57109e00d0..066c256d55b2d 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 c04b89df37b8a..1b5d61f5e05a2 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)
 ; CHECK-NEXT:   ret void
diff --git a/llvm/unittests/MIR/MachineMetadata.cpp b/llvm/unittests/MIR/MachineMetadata.cpp
index f58a3cac1bb0f..d1d71f9ae7df4 100644
--- a/llvm/unittests/MIR/MachineMetadata.cpp
+++ b/llvm/unittests/MIR/MachineMetadata.cpp
@@ -278,7 +278,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]]}
@@ -429,7 +429,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]]}
@@ -529,7 +529,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 08b23c0bbdfa4..bdd2a0b10ae1f 100644
--- a/mlir/lib/Target/LLVMIR/ModuleImport.cpp
+++ b/mlir/lib/Target/LLVMIR/ModuleImport.cpp
@@ -563,9 +563,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);
   };
@@ -584,7 +584,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 5bb42575a0955..59c88027585bb 100644
--- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
@@ -2286,9 +2286,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 7b59f91497120..993a70490f899 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 bf4c85786216f..fcdbcfcc7e499 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 ae399d4f7edef..34a049f9c7cfe 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 b461b72170c77..da1cd9edd58b1 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 29eaff8ad3fab..529e113d59ae1 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 1f3a07b5519be..85b12afe324ab 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 2a704ee9c576a..3d27da187026f 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 df416f3d6f63e..78e480fac341e 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 = !{}



More information about the llvm-branch-commits mailing list