[DAGCombiner] Add target hook function to decide folding (mul (add x, c1), c2)
[llvm-project.git] / llvm / test / Transforms / InstCombine / noalias-scope-decl.ll
blob1251579e596cd979281408410499462904726ca8
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -instcombine -S < %s | FileCheck %s
4 define void @test01(i8* %ptr0, i8* %ptr1) {
5 ; CHECK-LABEL: @test01(
6 ; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1
7 ; CHECK-NEXT:    store i8 43, i8* [[PTR1:%.*]], align 1
8 ; CHECK-NEXT:    ret void
10   call void @llvm.experimental.noalias.scope.decl(metadata !0)
11   store i8 42, i8* %ptr0
12   store i8 43, i8* %ptr1
13   ret void
16 define void @test02_keep(i8* %ptr0, i8* %ptr1) {
17 ; CHECK-LABEL: @test02_keep(
18 ; CHECK-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata !0)
19 ; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !0
20 ; CHECK-NEXT:    store i8 43, i8* [[PTR1:%.*]], align 1, !noalias !3
21 ; CHECK-NEXT:    ret void
23   call void @llvm.experimental.noalias.scope.decl(metadata !0)
24   store i8 42, i8* %ptr0, !alias.scope !0
25   store i8 43, i8* %ptr1, !noalias !5
26   ret void
29 define void @test03(i8* %ptr0, i8* %ptr1) {
30 ; CHECK-LABEL: @test03(
31 ; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !4
32 ; CHECK-NEXT:    store i8 43, i8* [[PTR1:%.*]], align 1, !noalias !3
33 ; CHECK-NEXT:    ret void
35   call void @llvm.experimental.noalias.scope.decl(metadata !0)
36   store i8 42, i8* %ptr0, !alias.scope !4
37   store i8 43, i8* %ptr1, !noalias !5
38   ret void
41 define void @test04_keep(i8* %ptr0, i8* %ptr1) {
42 ; CHECK-LABEL: @test04_keep(
43 ; CHECK-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata !0)
44 ; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !3
45 ; CHECK-NEXT:    store i8 43, i8* [[PTR1:%.*]], align 1, !noalias !3
46 ; CHECK-NEXT:    ret void
48   call void @llvm.experimental.noalias.scope.decl(metadata !0)
49   store i8 42, i8* %ptr0, !alias.scope !5
50   store i8 43, i8* %ptr1, !noalias !5
51   ret void
54 define void @test05_keep(i8* %ptr0, i8* %ptr1) {
55 ; CHECK-LABEL: @test05_keep(
56 ; CHECK-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata !0)
57 ; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !3
58 ; CHECK-NEXT:    store i8 43, i8* [[PTR1:%.*]], align 1, !noalias !0
59 ; CHECK-NEXT:    ret void
61   call void @llvm.experimental.noalias.scope.decl(metadata !0)
62   store i8 42, i8* %ptr0, !alias.scope !5
63   store i8 43, i8* %ptr1, !noalias !0
64   ret void
67 define void @test06(i8* %ptr0, i8* %ptr1) {
68 ; CHECK-LABEL: @test06(
69 ; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !3
70 ; CHECK-NEXT:    store i8 43, i8* [[PTR1:%.*]], align 1, !noalias !4
71 ; CHECK-NEXT:    ret void
73   call void @llvm.experimental.noalias.scope.decl(metadata !0)
74   store i8 42, i8* %ptr0, !alias.scope !5
75   store i8 43, i8* %ptr1, !noalias !4
76   ret void
79 define void @test07(i8* %ptr0, i8* %ptr1) {
80 ; CHECK-LABEL: @test07(
81 ; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !0
82 ; CHECK-NEXT:    store i8 43, i8* [[PTR1:%.*]], align 1, !noalias !4
83 ; CHECK-NEXT:    ret void
85   call void @llvm.experimental.noalias.scope.decl(metadata !0)
86   store i8 42, i8* %ptr0, !alias.scope !0
87   store i8 43, i8* %ptr1, !noalias !4
88   ret void
91 define void @test08(i8* %ptr0, i8* %ptr1) {
92 ; CHECK-LABEL: @test08(
93 ; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !4
94 ; CHECK-NEXT:    store i8 43, i8* [[PTR1:%.*]], align 1, !noalias !0
95 ; CHECK-NEXT:    ret void
97   call void @llvm.experimental.noalias.scope.decl(metadata !0)
98   store i8 42, i8* %ptr0, !alias.scope !4
99   store i8 43, i8* %ptr1, !noalias !0
100   ret void
103 define void @test11(i8* %ptr0) {
104 ; CHECK-LABEL: @test11(
105 ; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !0
106 ; CHECK-NEXT:    ret void
108   call void @llvm.experimental.noalias.scope.decl(metadata !0)
109   store i8 42, i8* %ptr0, !alias.scope !0
110   ret void
113 define void @test12(i8* %ptr0) {
114 ; CHECK-LABEL: @test12(
115 ; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !4
116 ; CHECK-NEXT:    ret void
118   call void @llvm.experimental.noalias.scope.decl(metadata !0)
119   store i8 42, i8* %ptr0, !alias.scope !4
120   ret void
123 define void @test13(i8* %ptr0) {
124 ; CHECK-LABEL: @test13(
125 ; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !3
126 ; CHECK-NEXT:    ret void
128   call void @llvm.experimental.noalias.scope.decl(metadata !0)
129   store i8 42, i8* %ptr0, !alias.scope !5
130   ret void
133 define void @test14(i8* %ptr0) {
134 ; CHECK-LABEL: @test14(
135 ; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !noalias !0
136 ; CHECK-NEXT:    ret void
138   call void @llvm.experimental.noalias.scope.decl(metadata !0)
139   store i8 42, i8* %ptr0, !noalias !0
140   ret void
143 define void @test15(i8* %ptr0) {
144 ; CHECK-LABEL: @test15(
145 ; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !noalias !4
146 ; CHECK-NEXT:    ret void
148   call void @llvm.experimental.noalias.scope.decl(metadata !0)
149   store i8 42, i8* %ptr0, !noalias !4
150   ret void
153 define void @test16(i8* %ptr0) {
154 ; CHECK-LABEL: @test16(
155 ; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !noalias !3
156 ; CHECK-NEXT:    ret void
158   call void @llvm.experimental.noalias.scope.decl(metadata !0)
159   store i8 42, i8* %ptr0, !noalias !5
160   ret void
163 declare void @llvm.experimental.noalias.scope.decl(metadata)
165 !0 = !{ !1 }
166 !1 = distinct !{ !1, !2 }
167 !2 = distinct !{ !2 }
168 !3 = !{ !4 }
169 !4 = distinct !{ !4, !2 }
170 !5 = !{ !1, !4 }