xref: /llvm-project/llvm/test/Transforms/EarlyCSE/noalias-scope-decl.ll (revision ac696ac4530fb3df626195e94e83649bf7114754)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -S < %s -passes=early-cse -earlycse-debug-hash | FileCheck %s
3
4; Store-to-load forwarding across a @llvm.experimental.noalias.scope.decl.
5
6define float @s2l(ptr %p) {
7; CHECK-LABEL: @s2l(
8; CHECK-NEXT:    store float 0.000000e+00, ptr [[P:%.*]], align 4
9; CHECK-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata !0)
10; CHECK-NEXT:    ret float 0.000000e+00
11;
12  store float 0.0, ptr %p
13  call void @llvm.experimental.noalias.scope.decl(metadata !0)
14  %t = load float, ptr %p
15  ret float %t
16}
17
18; Redundant load elimination across a @llvm.experimental.noalias.scope.decl.
19
20define float @rle(ptr %p) {
21; CHECK-LABEL: @rle(
22; CHECK-NEXT:    [[R:%.*]] = load float, ptr [[P:%.*]], align 4
23; CHECK-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata !0)
24; CHECK-NEXT:    [[T:%.*]] = fadd float [[R]], [[R]]
25; CHECK-NEXT:    ret float [[T]]
26;
27  %r = load float, ptr %p
28  call void @llvm.experimental.noalias.scope.decl(metadata !0)
29  %s = load float, ptr %p
30  %t = fadd float %r, %s
31  ret float %t
32}
33
34declare void @llvm.experimental.noalias.scope.decl(metadata)
35
36!0 = !{ !1 }
37!1 = distinct !{ !1, !2 }
38!2 = distinct !{ !2 }
39