[DAGCombiner] Add target hook function to decide folding (mul (add x, c1), c2)
[llvm-project.git] / llvm / test / Transforms / GVNSink / sink-combine-metadata.ll
blob97ee8cf716128511c31113a8d96f36f81cba468b
1 ; RUN: opt < %s -gvn-sink -S | FileCheck %s
3 ; Check that nonnull metadata for non-dominating loads is not propagated.
4 ; CHECK-LABEL: @test1(
5 ; CHECK-LABEL: if.end:
6 ; CHECK:  %[[ptr:.*]] = phi i32**
7 ; CHECK: %[[load:.*]] = load i32*, i32** %[[ptr]]
8 ; CHECK-NOT: !nonnull
9 ; CHECK: ret i32* %[[load]]
10 define i32* @test1(i1 zeroext %flag, i32*** %p) {
11 entry:
12   br i1 %flag, label %if.then, label %if.else
14 if.then:
15   %a = load i32**, i32*** %p
16   %aa = load i32*, i32** %a, !nonnull !0
17   br label %if.end
19 if.else:
20   %b = load i32**, i32*** %p
21   %bb= load i32*, i32** %b
22   br label %if.end
24 if.end:
25   %c = phi i32* [ %aa, %if.then ], [ %bb, %if.else ]
26   ret i32* %c
29 ; CHECK-LABEL: @test2(
30 ; CHECK-LABEL: if.end:
31 ; CHECK:  %[[ptr:.*]] = phi i32**
32 ; CHECK: %[[load:.*]] = load i32*, i32** %[[ptr]]
33 ; CHECK-NOT: !nonnull
34 ; CHECK: ret i32* %[[load]]
35 define i32* @test2(i1 zeroext %flag, i32*** %p) {
36 entry:
37   br i1 %flag, label %if.then, label %if.else
39 if.then:
40   %a = load i32**, i32*** %p
41   %aa = load i32*, i32** %a
42   br label %if.end
44 if.else:
45   %b = load i32**, i32*** %p
46   %bb= load i32*, i32** %b, !nonnull !0
47   br label %if.end
49 if.end:
50   %c = phi i32* [ %aa, %if.then ], [ %bb, %if.else ]
51   ret i32* %c
55 !0 = !{}