[InstCombine] Signed saturation patterns
[llvm-core.git] / test / Transforms / InstCombine / load-combine-metadata-dominance.ll
blob25e352bdb7bfd0c6b20da4816512a4958b23f552
1 ; RUN: opt -instcombine -S < %s | FileCheck %s
3 target datalayout = "e-m:e-p:64:64:64-i64:64-f80:128-n8:16:32:64-S128"
5 ; Check that nonnull metadata is propagated from dominating load.
6 ; CHECK-LABEL: @combine_metadata_dominance1(
7 ; CHECK-LABEL: bb1:
8 ; CHECK: load i32*, i32** %p, align 8, !nonnull !0
9 ; CHECK-NOT: load i32*, i32** %p
10 define void @combine_metadata_dominance1(i32** %p) {
11 entry:
12   %a = load i32*, i32** %p, !nonnull !0
13   br label %bb1
15 bb1:
16   %b = load i32*, i32** %p
17   store i32 0, i32* %a
18   store i32 0, i32* %b
19   ret void
22 declare i32 @use(i32*, i32) readonly
24 ; Check that nonnull from the dominated load does not get propagated.
25 ; There are some cases where it would be safe to keep it.
26 ; CHECK-LABEL: @combine_metadata_dominance2(
27 ; CHECK-NOT: nonnull
28 define void @combine_metadata_dominance2(i32** %p) {
29 entry:
30   %a = load i32*, i32** %p
31   br i1 undef, label %bb1, label %bb2
33 bb1:
34   %b = load i32*, i32** %p, !nonnull !0
35   store i32 0, i32* %a
36   store i32 0, i32* %b
37   ret void
39 bb2:
40   ret void
44 !0 = !{}