1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -passes=instcombine -S < %s | FileCheck %s 3 4define void @test01(ptr %ptr0, ptr %ptr1) { 5; CHECK-LABEL: @test01( 6; CHECK-NEXT: store i8 42, ptr [[PTR0:%.*]], align 1 7; CHECK-NEXT: store i8 43, ptr [[PTR1:%.*]], align 1 8; CHECK-NEXT: ret void 9; 10 call void @llvm.experimental.noalias.scope.decl(metadata !0) 11 store i8 42, ptr %ptr0 12 store i8 43, ptr %ptr1 13 ret void 14} 15 16define void @test02_keep(ptr %ptr0, ptr %ptr1) { 17; CHECK-LABEL: @test02_keep( 18; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !0) 19; CHECK-NEXT: store i8 42, ptr [[PTR0:%.*]], align 1, !alias.scope !0 20; CHECK-NEXT: store i8 43, ptr [[PTR1:%.*]], align 1, !noalias !3 21; CHECK-NEXT: ret void 22; 23 call void @llvm.experimental.noalias.scope.decl(metadata !0) 24 store i8 42, ptr %ptr0, !alias.scope !0 25 store i8 43, ptr %ptr1, !noalias !5 26 ret void 27} 28 29define void @test03(ptr %ptr0, ptr %ptr1) { 30; CHECK-LABEL: @test03( 31; CHECK-NEXT: store i8 42, ptr [[PTR0:%.*]], align 1, !alias.scope !5 32; CHECK-NEXT: store i8 43, ptr [[PTR1:%.*]], align 1, !noalias !3 33; CHECK-NEXT: ret void 34; 35 call void @llvm.experimental.noalias.scope.decl(metadata !0) 36 store i8 42, ptr %ptr0, !alias.scope !3 37 store i8 43, ptr %ptr1, !noalias !5 38 ret void 39} 40 41define void @test04_keep(ptr %ptr0, ptr %ptr1) { 42; CHECK-LABEL: @test04_keep( 43; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !0) 44; CHECK-NEXT: store i8 42, ptr [[PTR0:%.*]], align 1, !alias.scope !3 45; CHECK-NEXT: store i8 43, ptr [[PTR1:%.*]], align 1, !noalias !3 46; CHECK-NEXT: ret void 47; 48 call void @llvm.experimental.noalias.scope.decl(metadata !0) 49 store i8 42, ptr %ptr0, !alias.scope !5 50 store i8 43, ptr %ptr1, !noalias !5 51 ret void 52} 53 54define void @test05_keep(ptr %ptr0, ptr %ptr1) { 55; CHECK-LABEL: @test05_keep( 56; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !0) 57; CHECK-NEXT: store i8 42, ptr [[PTR0:%.*]], align 1, !alias.scope !3 58; CHECK-NEXT: store i8 43, ptr [[PTR1:%.*]], align 1, !noalias !0 59; CHECK-NEXT: ret void 60; 61 call void @llvm.experimental.noalias.scope.decl(metadata !0) 62 store i8 42, ptr %ptr0, !alias.scope !5 63 store i8 43, ptr %ptr1, !noalias !0 64 ret void 65} 66 67define void @test06(ptr %ptr0, ptr %ptr1) { 68; CHECK-LABEL: @test06( 69; CHECK-NEXT: store i8 42, ptr [[PTR0:%.*]], align 1, !alias.scope !3 70; CHECK-NEXT: store i8 43, ptr [[PTR1:%.*]], align 1, !noalias !5 71; CHECK-NEXT: ret void 72; 73 call void @llvm.experimental.noalias.scope.decl(metadata !0) 74 store i8 42, ptr %ptr0, !alias.scope !5 75 store i8 43, ptr %ptr1, !noalias !3 76 ret void 77} 78 79define void @test07(ptr %ptr0, ptr %ptr1) { 80; CHECK-LABEL: @test07( 81; CHECK-NEXT: store i8 42, ptr [[PTR0:%.*]], align 1, !alias.scope !0 82; CHECK-NEXT: store i8 43, ptr [[PTR1:%.*]], align 1, !noalias !5 83; CHECK-NEXT: ret void 84; 85 call void @llvm.experimental.noalias.scope.decl(metadata !0) 86 store i8 42, ptr %ptr0, !alias.scope !0 87 store i8 43, ptr %ptr1, !noalias !3 88 ret void 89} 90 91define void @test08(ptr %ptr0, ptr %ptr1) { 92; CHECK-LABEL: @test08( 93; CHECK-NEXT: store i8 42, ptr [[PTR0:%.*]], align 1, !alias.scope !5 94; CHECK-NEXT: store i8 43, ptr [[PTR1:%.*]], align 1, !noalias !0 95; CHECK-NEXT: ret void 96; 97 call void @llvm.experimental.noalias.scope.decl(metadata !0) 98 store i8 42, ptr %ptr0, !alias.scope !3 99 store i8 43, ptr %ptr1, !noalias !0 100 ret void 101} 102 103define void @test11(ptr %ptr0) { 104; CHECK-LABEL: @test11( 105; CHECK-NEXT: store i8 42, ptr [[PTR0:%.*]], align 1, !alias.scope !0 106; CHECK-NEXT: ret void 107; 108 call void @llvm.experimental.noalias.scope.decl(metadata !0) 109 store i8 42, ptr %ptr0, !alias.scope !0 110 ret void 111} 112 113define void @test12(ptr %ptr0) { 114; CHECK-LABEL: @test12( 115; CHECK-NEXT: store i8 42, ptr [[PTR0:%.*]], align 1, !alias.scope !5 116; CHECK-NEXT: ret void 117; 118 call void @llvm.experimental.noalias.scope.decl(metadata !0) 119 store i8 42, ptr %ptr0, !alias.scope !3 120 ret void 121} 122 123define void @test13(ptr %ptr0) { 124; CHECK-LABEL: @test13( 125; CHECK-NEXT: store i8 42, ptr [[PTR0:%.*]], align 1, !alias.scope !3 126; CHECK-NEXT: ret void 127; 128 call void @llvm.experimental.noalias.scope.decl(metadata !0) 129 store i8 42, ptr %ptr0, !alias.scope !5 130 ret void 131} 132 133define void @test14(ptr %ptr0) { 134; CHECK-LABEL: @test14( 135; CHECK-NEXT: store i8 42, ptr [[PTR0:%.*]], align 1, !noalias !0 136; CHECK-NEXT: ret void 137; 138 call void @llvm.experimental.noalias.scope.decl(metadata !0) 139 store i8 42, ptr %ptr0, !noalias !0 140 ret void 141} 142 143define void @test15(ptr %ptr0) { 144; CHECK-LABEL: @test15( 145; CHECK-NEXT: store i8 42, ptr [[PTR0:%.*]], align 1, !noalias !5 146; CHECK-NEXT: ret void 147; 148 call void @llvm.experimental.noalias.scope.decl(metadata !0) 149 store i8 42, ptr %ptr0, !noalias !3 150 ret void 151} 152 153define void @test16(ptr %ptr0) { 154; CHECK-LABEL: @test16( 155; CHECK-NEXT: store i8 42, ptr [[PTR0:%.*]], align 1, !noalias !3 156; CHECK-NEXT: ret void 157; 158 call void @llvm.experimental.noalias.scope.decl(metadata !0) 159 store i8 42, ptr %ptr0, !noalias !5 160 ret void 161} 162 163declare void @llvm.experimental.noalias.scope.decl(metadata) 164 165!0 = !{ !1 } 166!1 = distinct !{ !1, !2 } 167!2 = distinct !{ !2 } 168!3 = !{ !4 } 169!4 = distinct !{ !4, !2 } 170!5 = !{ !1, !4 } 171