64 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 22; RUN: opt -S -passes=gvn-hoist < %s | FileCheck %s3 4; Make sure the two stores @B do not get hoisted past the load @B.5 6@A = external global i87@B = external global ptr8 9define ptr @Foo(i1 %arg) {10; CHECK-LABEL: define ptr @Foo(i1 %arg) {11; CHECK-NEXT: store i8 0, ptr @A, align 112; CHECK-NEXT: br i1 %arg, label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]13; CHECK: if.then:14; CHECK-NEXT: store ptr null, ptr @B, align 815; CHECK-NEXT: ret ptr null16; CHECK: if.else:17; CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr @B, align 818; CHECK-NEXT: store ptr null, ptr @B, align 819; CHECK-NEXT: ret ptr [[TMP1]]20;21 store i8 0, ptr @A22 br i1 %arg, label %if.then, label %if.else23 24if.then:25 store ptr null, ptr @B26 ret ptr null27 28if.else:29 %1 = load ptr, ptr @B30 store ptr null, ptr @B31 ret ptr %132}33 34; Make sure the two stores @B do not get hoisted past the store @GlobalVar.35 36@GlobalVar = internal global i8 037 38define ptr @Fun(i1 %arg) {39; CHECK-LABEL: define ptr @Fun(i1 %arg) {40; CHECK-NEXT: store i8 0, ptr @A, align 141; CHECK-NEXT: br i1 %arg, label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]42; CHECK: if.then:43; CHECK-NEXT: store ptr null, ptr @B, align 844; CHECK-NEXT: ret ptr null45; CHECK: if.else:46; CHECK-NEXT: store i8 0, ptr @GlobalVar, align 147; CHECK-NEXT: store ptr null, ptr @B, align 848; CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr @B, align 849; CHECK-NEXT: ret ptr [[TMP1]]50;51 store i8 0, ptr @A52 br i1 %arg, label %if.then, label %if.else53 54if.then:55 store ptr null, ptr @B56 ret ptr null57 58if.else:59 store i8 0, ptr @GlobalVar60 store ptr null, ptr @B61 %1 = load ptr, ptr @B62 ret ptr %163}64