70 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 62; RUN: opt -S < %s -passes=gvn | FileCheck %s3 4declare void @llvm.sideeffect()5 6; Store-to-load forwarding across a @llvm.sideeffect.7define float @s2l(ptr %p) {8; CHECK-LABEL: define float @s2l(9; CHECK-SAME: ptr [[P:%.*]]) {10; CHECK-NEXT: store float 0.000000e+00, ptr [[P]], align 411; CHECK-NEXT: call void @llvm.sideeffect()12; CHECK-NEXT: ret float 0.000000e+0013;14 store float 0.0, ptr %p15 call void @llvm.sideeffect()16 %t = load float, ptr %p17 ret float %t18}19 20; Redundant load elimination across a @llvm.sideeffect.21define float @rle(ptr %p) {22; CHECK-LABEL: define float @rle(23; CHECK-SAME: ptr [[P:%.*]]) {24; CHECK-NEXT: [[R:%.*]] = load float, ptr [[P]], align 425; CHECK-NEXT: call void @llvm.sideeffect()26; CHECK-NEXT: [[T:%.*]] = fadd float [[R]], [[R]]27; CHECK-NEXT: ret float [[T]]28;29 %r = load float, ptr %p30 call void @llvm.sideeffect()31 %s = load float, ptr %p32 %t = fadd float %r, %s33 ret float %t34}35 36; LICM across a @llvm.sideeffect.37define float @licm(i64 %n, ptr nocapture readonly %p) #0 {38; CHECK-LABEL: define float @licm(39; CHECK-SAME: i64 [[N:%.*]], ptr readonly captures(none) [[P:%.*]]) {40; CHECK-NEXT: [[BB0:.*]]:41; CHECK-NEXT: [[T3_PRE:%.*]] = load float, ptr [[P]], align 442; CHECK-NEXT: br label %[[LOOP:.*]]43; CHECK: [[LOOP]]:44; CHECK-NEXT: [[I:%.*]] = phi i64 [ 0, %[[BB0]] ], [ [[T5:%.*]], %[[LOOP]] ]45; CHECK-NEXT: [[SUM:%.*]] = phi float [ 0.000000e+00, %[[BB0]] ], [ [[T4:%.*]], %[[LOOP]] ]46; CHECK-NEXT: call void @llvm.sideeffect()47; CHECK-NEXT: [[T4]] = fadd float [[SUM]], [[T3_PRE]]48; CHECK-NEXT: [[T5]] = add i64 [[I]], 149; CHECK-NEXT: [[T6:%.*]] = icmp ult i64 [[T5]], [[N]]50; CHECK-NEXT: br i1 [[T6]], label %[[LOOP]], label %[[BB2:.*]]51; CHECK: [[BB2]]:52; CHECK-NEXT: ret float [[T4]]53;54bb0:55 br label %loop56 57loop:58 %i = phi i64 [ 0, %bb0 ], [ %t5, %loop ]59 %sum = phi float [ 0.000000e+00, %bb0 ], [ %t4, %loop ]60 call void @llvm.sideeffect()61 %t3 = load float, ptr %p62 %t4 = fadd float %sum, %t363 %t5 = add i64 %i, 164 %t6 = icmp ult i64 %t5, %n65 br i1 %t6, label %loop, label %bb266 67bb2:68 ret float %t469}70