68 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -S -passes=mem2reg < %s | FileCheck %s3 4define i8 @single_store_literal_poison(i1 %cond) {5; CHECK-LABEL: define i8 @single_store_literal_poison(6; CHECK-SAME: i1 [[COND:%.*]]) {7; CHECK-NEXT: br i1 [[COND]], label %[[IF:.*]], label %[[EXIT:.*]]8; CHECK: [[IF]]:9; CHECK-NEXT: br label %[[EXIT]]10; CHECK: [[EXIT]]:11; CHECK-NEXT: ret i8 undef12;13 %a = alloca i8, align 114 br i1 %cond, label %if, label %exit15 16if:17 store i8 poison, ptr %a, align 118 br label %exit19 20exit:21 %v = load i8, ptr %a, align 122 ret i8 %v23}24 25; FIXME: This is a miscompile.26define i8 @single_store_maybe_poison(i1 %cond, i8 %x) {27; CHECK-LABEL: define i8 @single_store_maybe_poison(28; CHECK-SAME: i1 [[COND:%.*]], i8 [[X:%.*]]) {29; CHECK-NEXT: br i1 [[COND]], label %[[IF:.*]], label %[[EXIT:.*]]30; CHECK: [[IF]]:31; CHECK-NEXT: br label %[[EXIT]]32; CHECK: [[EXIT]]:33; CHECK-NEXT: [[A_0:%.*]] = phi i8 [ [[X]], %[[IF]] ], [ undef, [[TMP0:%.*]] ]34; CHECK-NEXT: ret i8 [[A_0]]35;36 %a = alloca i8, align 137 br i1 %cond, label %if, label %exit38 39if:40 store i8 %x, ptr %a, align 141 br label %exit42 43exit:44 %v = load i8, ptr %a, align 145 ret i8 %v46}47 48define i8 @single_store_cant_be_poison(i1 %cond, i8 noundef %x) {49; CHECK-LABEL: define i8 @single_store_cant_be_poison(50; CHECK-SAME: i1 [[COND:%.*]], i8 noundef [[X:%.*]]) {51; CHECK-NEXT: br i1 [[COND]], label %[[IF:.*]], label %[[EXIT:.*]]52; CHECK: [[IF]]:53; CHECK-NEXT: br label %[[EXIT]]54; CHECK: [[EXIT]]:55; CHECK-NEXT: ret i8 [[X]]56;57 %a = alloca i8, align 158 br i1 %cond, label %if, label %exit59 60if:61 store i8 %x, ptr %a, align 162 br label %exit63 64exit:65 %v = load i8, ptr %a, align 166 ret i8 %v67}68