178 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 22; RUN: opt %s -passes=newgvn -S | FileCheck %s3target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"4target triple = "x86_64-unknown-linux-gnu"5 6define ptr @test1(ptr %v0, ptr %v1) {7; CHECK-LABEL: define ptr @test18; CHECK-SAME: (ptr [[V0:%.*]], ptr [[V1:%.*]]) {9; CHECK-NEXT: top:10; CHECK-NEXT: [[V2:%.*]] = load ptr, ptr [[V0]], align 811; CHECK-NEXT: store ptr [[V2]], ptr [[V1]], align 812; CHECK-NEXT: ret ptr [[V2]]13;14top:15 %v2 = load ptr, ptr %v0, !nonnull !016 store ptr %v2, ptr %v117 %v3 = load ptr, ptr %v118 ret ptr %v319}20 21; FIXME: could propagate nonnull to first load?22define ptr @test2(ptr %v0, ptr %v1) {23; CHECK-LABEL: define ptr @test224; CHECK-SAME: (ptr [[V0:%.*]], ptr [[V1:%.*]]) {25; CHECK-NEXT: top:26; CHECK-NEXT: [[V2:%.*]] = load ptr, ptr [[V0]], align 827; CHECK-NEXT: store ptr [[V2]], ptr [[V1]], align 828; CHECK-NEXT: ret ptr [[V2]]29;30top:31 %v2 = load ptr, ptr %v032 store ptr %v2, ptr %v133 %v3 = load ptr, ptr %v1, !nonnull !034 ret ptr %v335}36 37declare void @use1(ptr %a) readonly38 39define ptr @test3(ptr %v0, i1 %arg) {40; CHECK-LABEL: define ptr @test341; CHECK-SAME: (ptr [[V0:%.*]], i1 [[ARG:%.*]]) {42; CHECK-NEXT: top:43; CHECK-NEXT: [[V1:%.*]] = load ptr, ptr [[V0]], align 844; CHECK-NEXT: call void @use1(ptr [[V1]])45; CHECK-NEXT: br i1 [[ARG]], label [[BB1:%.*]], label [[BB2:%.*]]46; CHECK: bb1:47; CHECK-NEXT: ret ptr [[V1]]48; CHECK: bb2:49; CHECK-NEXT: ret ptr [[V1]]50;51top:52 %v1 = load ptr, ptr %v053 call void @use1(ptr %v1)54 br i1 %arg, label %bb1, label %bb255 56bb1:57 %v2 = load ptr, ptr %v0, !nonnull !058 ret ptr %v259 60bb2:61 %v3 = load ptr, ptr %v062 ret ptr %v363}64 65define ptr @test4(ptr %v0, i1 %arg) {66; CHECK-LABEL: define ptr @test467; CHECK-SAME: (ptr [[V0:%.*]], i1 [[ARG:%.*]]) {68; CHECK-NEXT: top:69; CHECK-NEXT: [[V1:%.*]] = load ptr, ptr [[V0]], align 870; CHECK-NEXT: call void @use1(ptr [[V1]])71; CHECK-NEXT: br i1 [[ARG]], label [[BB1:%.*]], label [[BB2:%.*]]72; CHECK: bb1:73; CHECK-NEXT: ret ptr [[V1]]74; CHECK: bb2:75; CHECK-NEXT: ret ptr [[V1]]76;77top:78 %v1 = load ptr, ptr %v079 call void @use1(ptr %v1)80 br i1 %arg, label %bb1, label %bb281 82bb1:83 %v2 = load ptr, ptr %v084 ret ptr %v285 86bb2:87 %v3 = load ptr, ptr %v0, !nonnull !088 ret ptr %v389}90 91define ptr @test5(ptr %v0, i1 %arg) {92; CHECK-LABEL: define ptr @test593; CHECK-SAME: (ptr [[V0:%.*]], i1 [[ARG:%.*]]) {94; CHECK-NEXT: top:95; CHECK-NEXT: [[V1:%.*]] = load ptr, ptr [[V0]], align 896; CHECK-NEXT: call void @use1(ptr [[V1]])97; CHECK-NEXT: br i1 [[ARG]], label [[BB1:%.*]], label [[BB2:%.*]]98; CHECK: bb1:99; CHECK-NEXT: ret ptr [[V1]]100; CHECK: bb2:101; CHECK-NEXT: ret ptr [[V1]]102;103top:104 %v1 = load ptr, ptr %v0, !nonnull !0105 call void @use1(ptr %v1)106 br i1 %arg, label %bb1, label %bb2107 108bb1:109 %v2 = load ptr, ptr %v0110 ret ptr %v2111 112bb2:113 %v3 = load ptr, ptr %v0114 ret ptr %v3115}116 117define ptr @test6(ptr %v0, ptr %v1, i1 %arg) {118; CHECK-LABEL: define ptr @test6119; CHECK-SAME: (ptr [[V0:%.*]], ptr [[V1:%.*]], i1 [[ARG:%.*]]) {120; CHECK-NEXT: top:121; CHECK-NEXT: br i1 [[ARG]], label [[BB1:%.*]], label [[BB2:%.*]]122; CHECK: bb1:123; CHECK-NEXT: [[V2:%.*]] = load ptr, ptr [[V0]], align 8124; CHECK-NEXT: store ptr [[V2]], ptr [[V1]], align 8125; CHECK-NEXT: ret ptr [[V2]]126; CHECK: bb2:127; CHECK-NEXT: [[V4:%.*]] = load ptr, ptr [[V0]], align 8128; CHECK-NEXT: store ptr [[V4]], ptr [[V1]], align 8129; CHECK-NEXT: ret ptr [[V4]]130;131top:132 br i1 %arg, label %bb1, label %bb2133 134bb1:135 %v2 = load ptr, ptr %v0, !nonnull !0136 store ptr %v2, ptr %v1137 %v3 = load ptr, ptr %v1138 ret ptr %v3139 140bb2:141 %v4 = load ptr, ptr %v0142 store ptr %v4, ptr %v1143 %v5 = load ptr, ptr %v1, !nonnull !0144 ret ptr %v5145}146 147declare void @use2(ptr %a)148 149define ptr @test7(ptr %v0, i1 %arg) {150; CHECK-LABEL: define ptr @test7151; CHECK-SAME: (ptr [[V0:%.*]], i1 [[ARG:%.*]]) {152; CHECK-NEXT: top:153; CHECK-NEXT: [[V1:%.*]] = load ptr, ptr [[V0]], align 8, !nonnull [[META0:![0-9]+]]154; CHECK-NEXT: call void @use2(ptr [[V1]])155; CHECK-NEXT: br i1 [[ARG]], label [[BB1:%.*]], label [[BB2:%.*]]156; CHECK: bb1:157; CHECK-NEXT: [[V2:%.*]] = load ptr, ptr [[V0]], align 8158; CHECK-NEXT: ret ptr [[V2]]159; CHECK: bb2:160; CHECK-NEXT: [[V3:%.*]] = load ptr, ptr [[V0]], align 8161; CHECK-NEXT: ret ptr [[V3]]162;163top:164 %v1 = load ptr, ptr %v0, !nonnull !0165 call void @use2(ptr %v1)166 br i1 %arg, label %bb1, label %bb2167 168bb1:169 %v2 = load ptr, ptr %v0170 ret ptr %v2171 172bb2:173 %v3 = load ptr, ptr %v0174 ret ptr %v3175}176 177!0 = !{}178