1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -S -passes='move-auto-init' -verify-memoryssa | FileCheck %s 3 4target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" 5 6; In that case, the store to %val happens before the fence and cannot go past 7; it. 8define void @foo(i32 %x) { 9; CHECK-LABEL: @foo( 10; CHECK-NEXT: entry: 11; CHECK-NEXT: [[VAL:%.*]] = alloca i32, align 4 12; CHECK-NEXT: store i32 -1431655766, ptr [[VAL]], align 4, !annotation !0 13; CHECK-NEXT: [[TOBOOL:%.*]] = icmp ne i32 [[X:%.*]], 0 14; CHECK-NEXT: fence acquire 15; CHECK-NEXT: br i1 [[TOBOOL]], label [[IF_THEN:%.*]], label [[IF_END:%.*]] 16; CHECK: if.then: 17; CHECK-NEXT: call void @dump(ptr [[VAL]]) 18; CHECK-NEXT: br label [[IF_END]] 19; CHECK: if.end: 20; CHECK-NEXT: ret void 21; 22entry: 23 %val = alloca i32, align 4 24 store i32 -1431655766, ptr %val, align 4, !annotation !0 25 %tobool = icmp ne i32 %x, 0 26 fence acquire 27 br i1 %tobool, label %if.then, label %if.end 28 29if.then: ; preds = %entry 30 call void @dump(ptr %val) 31 br label %if.end 32 33if.end: ; preds = %if.then, %entry 34 ret void 35} 36 37; In that case, the store to %val happens after the fence and it is moved within 38; the true branch as expected. 39define void @bar(i32 %x) { 40; CHECK-LABEL: @bar( 41; CHECK-NEXT: entry: 42; CHECK-NEXT: [[VAL:%.*]] = alloca i32, align 4 43; CHECK-NEXT: [[TOBOOL:%.*]] = icmp ne i32 [[X:%.*]], 0 44; CHECK-NEXT: fence acquire 45; CHECK-NEXT: br i1 [[TOBOOL]], label [[IF_THEN:%.*]], label [[IF_END:%.*]] 46; CHECK: if.then: 47; CHECK-NEXT: store i32 -1431655766, ptr [[VAL]], align 4, !annotation !0 48; CHECK-NEXT: call void @dump(ptr [[VAL]]) 49; CHECK-NEXT: br label [[IF_END]] 50; CHECK: if.end: 51; CHECK-NEXT: ret void 52; 53entry: 54 %val = alloca i32, align 4 55 %tobool = icmp ne i32 %x, 0 56 fence acquire 57 store i32 -1431655766, ptr %val, align 4, !annotation !0 58 br i1 %tobool, label %if.then, label %if.end 59 60if.then: ; preds = %entry 61 call void @dump(ptr %val) 62 br label %if.end 63 64if.end: ; preds = %if.then, %entry 65 ret void 66} 67 68declare void @dump(ptr) 69 70!0 = !{!"auto-init"} 71