Files
clang-p2996/llvm/test/Transforms/InstCombine/noalias-scope-decl.ll
Jeroen Dobbelaere dcc7706fcf [InstCombine] Remove unused llvm.experimental.noalias.scope.decl
A @llvm.experimental.noalias.scope.decl is only useful if there is !alias.scope and !noalias metadata that uses the declared scope.
When that is not the case for at least one of the two, the intrinsic call can as well be removed.

Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D95141
2021-01-24 13:55:50 +01:00

171 lines
5.2 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -instcombine -S < %s | FileCheck %s
define void @test01(i8* %ptr0, i8* %ptr1) {
; CHECK-LABEL: @test01(
; CHECK-NEXT: store i8 42, i8* [[PTR0:%.*]], align 1
; CHECK-NEXT: store i8 43, i8* [[PTR1:%.*]], align 1
; CHECK-NEXT: ret void
;
call void @llvm.experimental.noalias.scope.decl(metadata !0)
store i8 42, i8* %ptr0
store i8 43, i8* %ptr1
ret void
}
define void @test02_keep(i8* %ptr0, i8* %ptr1) {
; CHECK-LABEL: @test02_keep(
; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !0)
; CHECK-NEXT: store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !0
; CHECK-NEXT: store i8 43, i8* [[PTR1:%.*]], align 1, !noalias !3
; CHECK-NEXT: ret void
;
call void @llvm.experimental.noalias.scope.decl(metadata !0)
store i8 42, i8* %ptr0, !alias.scope !0
store i8 43, i8* %ptr1, !noalias !5
ret void
}
define void @test03(i8* %ptr0, i8* %ptr1) {
; CHECK-LABEL: @test03(
; CHECK-NEXT: store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !4
; CHECK-NEXT: store i8 43, i8* [[PTR1:%.*]], align 1, !noalias !3
; CHECK-NEXT: ret void
;
call void @llvm.experimental.noalias.scope.decl(metadata !0)
store i8 42, i8* %ptr0, !alias.scope !4
store i8 43, i8* %ptr1, !noalias !5
ret void
}
define void @test04_keep(i8* %ptr0, i8* %ptr1) {
; CHECK-LABEL: @test04_keep(
; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !0)
; CHECK-NEXT: store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !3
; CHECK-NEXT: store i8 43, i8* [[PTR1:%.*]], align 1, !noalias !3
; CHECK-NEXT: ret void
;
call void @llvm.experimental.noalias.scope.decl(metadata !0)
store i8 42, i8* %ptr0, !alias.scope !5
store i8 43, i8* %ptr1, !noalias !5
ret void
}
define void @test05_keep(i8* %ptr0, i8* %ptr1) {
; CHECK-LABEL: @test05_keep(
; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !0)
; CHECK-NEXT: store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !3
; CHECK-NEXT: store i8 43, i8* [[PTR1:%.*]], align 1, !noalias !0
; CHECK-NEXT: ret void
;
call void @llvm.experimental.noalias.scope.decl(metadata !0)
store i8 42, i8* %ptr0, !alias.scope !5
store i8 43, i8* %ptr1, !noalias !0
ret void
}
define void @test06(i8* %ptr0, i8* %ptr1) {
; CHECK-LABEL: @test06(
; CHECK-NEXT: store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !3
; CHECK-NEXT: store i8 43, i8* [[PTR1:%.*]], align 1, !noalias !4
; CHECK-NEXT: ret void
;
call void @llvm.experimental.noalias.scope.decl(metadata !0)
store i8 42, i8* %ptr0, !alias.scope !5
store i8 43, i8* %ptr1, !noalias !4
ret void
}
define void @test07(i8* %ptr0, i8* %ptr1) {
; CHECK-LABEL: @test07(
; CHECK-NEXT: store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !0
; CHECK-NEXT: store i8 43, i8* [[PTR1:%.*]], align 1, !noalias !4
; CHECK-NEXT: ret void
;
call void @llvm.experimental.noalias.scope.decl(metadata !0)
store i8 42, i8* %ptr0, !alias.scope !0
store i8 43, i8* %ptr1, !noalias !4
ret void
}
define void @test08(i8* %ptr0, i8* %ptr1) {
; CHECK-LABEL: @test08(
; CHECK-NEXT: store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !4
; CHECK-NEXT: store i8 43, i8* [[PTR1:%.*]], align 1, !noalias !0
; CHECK-NEXT: ret void
;
call void @llvm.experimental.noalias.scope.decl(metadata !0)
store i8 42, i8* %ptr0, !alias.scope !4
store i8 43, i8* %ptr1, !noalias !0
ret void
}
define void @test11(i8* %ptr0) {
; CHECK-LABEL: @test11(
; CHECK-NEXT: store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !0
; CHECK-NEXT: ret void
;
call void @llvm.experimental.noalias.scope.decl(metadata !0)
store i8 42, i8* %ptr0, !alias.scope !0
ret void
}
define void @test12(i8* %ptr0) {
; CHECK-LABEL: @test12(
; CHECK-NEXT: store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !4
; CHECK-NEXT: ret void
;
call void @llvm.experimental.noalias.scope.decl(metadata !0)
store i8 42, i8* %ptr0, !alias.scope !4
ret void
}
define void @test13(i8* %ptr0) {
; CHECK-LABEL: @test13(
; CHECK-NEXT: store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !3
; CHECK-NEXT: ret void
;
call void @llvm.experimental.noalias.scope.decl(metadata !0)
store i8 42, i8* %ptr0, !alias.scope !5
ret void
}
define void @test14(i8* %ptr0) {
; CHECK-LABEL: @test14(
; CHECK-NEXT: store i8 42, i8* [[PTR0:%.*]], align 1, !noalias !0
; CHECK-NEXT: ret void
;
call void @llvm.experimental.noalias.scope.decl(metadata !0)
store i8 42, i8* %ptr0, !noalias !0
ret void
}
define void @test15(i8* %ptr0) {
; CHECK-LABEL: @test15(
; CHECK-NEXT: store i8 42, i8* [[PTR0:%.*]], align 1, !noalias !4
; CHECK-NEXT: ret void
;
call void @llvm.experimental.noalias.scope.decl(metadata !0)
store i8 42, i8* %ptr0, !noalias !4
ret void
}
define void @test16(i8* %ptr0) {
; CHECK-LABEL: @test16(
; CHECK-NEXT: store i8 42, i8* [[PTR0:%.*]], align 1, !noalias !3
; CHECK-NEXT: ret void
;
call void @llvm.experimental.noalias.scope.decl(metadata !0)
store i8 42, i8* %ptr0, !noalias !5
ret void
}
declare void @llvm.experimental.noalias.scope.decl(metadata)
!0 = !{ !1 }
!1 = distinct !{ !1, !2 }
!2 = distinct !{ !2 }
!3 = !{ !4 }
!4 = distinct !{ !4, !2 }
!5 = !{ !1, !4 }