brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.0 KiB · a7c37af Raw
38 lines · plain
1; RUN: opt -aa-pipeline=basic-aa -passes='print<memoryssa>' -verify-memoryssa -disable-output < %s 2>&1 | FileCheck %s2;3; Invariant loads should be considered live on entry, because, once the4; location is known to be dereferenceable, the value can never change.5 6@g = external global i327 8declare void @clobberAllTheThings()9 10; CHECK-LABEL: define i32 @foo11define i32 @foo() {12; CHECK: 1 = MemoryDef(liveOnEntry)13; CHECK-NEXT: call void @clobberAllTheThings()14  call void @clobberAllTheThings()15; CHECK: MemoryUse(liveOnEntry)16; CHECK-NEXT: %1 = load i3217  %1 = load i32, ptr @g, align 4, !invariant.load !018  ret i32 %119}20 21; CHECK-LABEL: define i32 @bar22define i32 @bar(ptr %a) {23; CHECK: 1 = MemoryDef(liveOnEntry)24; CHECK-NEXT: call void @clobberAllTheThings()25  call void @clobberAllTheThings()26 27; CHECK: 2 = MemoryDef(1)28; CHECK-NEXT: %1 = load atomic i3229  %1 = load atomic i32, ptr %a acquire, align 4, !invariant.load !030 31; CHECK: MemoryUse(2)32; CHECK-NEXT: %2 = load i3233  %2 = load i32, ptr %a, align 434  ret i32 %235}36 37!0 = !{}38