| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py |
| ; RUN: opt -S < %s -passes=early-cse -earlycse-debug-hash | FileCheck %s |
| |
| ; Store-to-load forwarding across a @llvm.experimental.noalias.scope.decl. |
| |
| define float @s2l(ptr %p) { |
| ; CHECK-LABEL: @s2l( |
| ; CHECK-NEXT: store float 0.000000e+00, ptr [[P:%.*]], align 4 |
| ; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !0) |
| ; CHECK-NEXT: ret float 0.000000e+00 |
| ; |
| store float 0.0, ptr %p |
| call void @llvm.experimental.noalias.scope.decl(metadata !0) |
| %t = load float, ptr %p |
| ret float %t |
| } |
| |
| ; Redundant load elimination across a @llvm.experimental.noalias.scope.decl. |
| |
| define float @rle(ptr %p) { |
| ; CHECK-LABEL: @rle( |
| ; CHECK-NEXT: [[R:%.*]] = load float, ptr [[P:%.*]], align 4 |
| ; CHECK-NEXT: call void @llvm.experimental.noalias.scope.decl(metadata !0) |
| ; CHECK-NEXT: [[T:%.*]] = fadd float [[R]], [[R]] |
| ; CHECK-NEXT: ret float [[T]] |
| ; |
| %r = load float, ptr %p |
| call void @llvm.experimental.noalias.scope.decl(metadata !0) |
| %s = load float, ptr %p |
| %t = fadd float %r, %s |
| ret float %t |
| } |
| |
| declare void @llvm.experimental.noalias.scope.decl(metadata) |
| |
| !0 = !{ !1 } |
| !1 = distinct !{ !1, !2 } |
| !2 = distinct !{ !2 } |