brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.1 KiB · e0a23d7 Raw
134 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes2; RUN: opt -aa-pipeline=basic-aa,globals-aa -passes='require<globals-aa>,gvn' -S < %s | FileCheck %s3 4; Make sure we do not hoist the load before the intrinsic, unknown function, or5; optnone function except if we know the unknown function is nosync and nocallback.6 7@G1 = internal global i32 undef8@G2 = internal global i32 undef9@G3 = internal global i32 undef10@G4 = internal global i32 undef11 12define void @test_barrier(i1 %c) {13; CHECK-LABEL: define {{[^@]+}}@test_barrier14; CHECK-SAME: (i1 [[C:%.*]]) {15; CHECK-NEXT:    br i1 [[C]], label [[INIT:%.*]], label [[CHECK:%.*]]16; CHECK:       init:17; CHECK-NEXT:    store i32 0, ptr @G1, align 418; CHECK-NEXT:    br label [[CHECK]]19; CHECK:       check:20; CHECK-NEXT:    call void @llvm.amdgcn.s.barrier()21; CHECK-NEXT:    [[V:%.*]] = load i32, ptr @G1, align 422; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i32 [[V]], 023; CHECK-NEXT:    call void @llvm.assume(i1 [[CMP]])24; CHECK-NEXT:    ret void25;26  br i1 %c, label %init, label %check27init:28  store i32 0, ptr @G129  br label %check30check:31  call void @llvm.amdgcn.s.barrier()32  %v = load i32, ptr @G133  %cmp = icmp eq i32 %v, 034  call void @llvm.assume(i1 %cmp)35  ret void36}37 38define void @test_unknown(i1 %c) {39; CHECK-LABEL: define {{[^@]+}}@test_unknown40; CHECK-SAME: (i1 [[C:%.*]]) {41; CHECK-NEXT:    br i1 [[C]], label [[INIT:%.*]], label [[CHECK:%.*]]42; CHECK:       init:43; CHECK-NEXT:    store i32 0, ptr @G2, align 444; CHECK-NEXT:    br label [[CHECK]]45; CHECK:       check:46; CHECK-NEXT:    call void @unknown()47; CHECK-NEXT:    [[V:%.*]] = load i32, ptr @G2, align 448; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i32 [[V]], 049; CHECK-NEXT:    call void @llvm.assume(i1 [[CMP]])50; CHECK-NEXT:    ret void51;52  br i1 %c, label %init, label %check53init:54  store i32 0, ptr @G255  br label %check56check:57  call void @unknown()58  %v = load i32, ptr @G259  %cmp = icmp eq i32 %v, 060  call void @llvm.assume(i1 %cmp)61  ret void62}63 64define void @test_optnone(i1 %c) {65; CHECK-LABEL: define {{[^@]+}}@test_optnone66; CHECK-SAME: (i1 [[C:%.*]]) {67; CHECK-NEXT:    br i1 [[C]], label [[INIT:%.*]], label [[CHECK:%.*]]68; CHECK:       init:69; CHECK-NEXT:    store i32 0, ptr @G3, align 470; CHECK-NEXT:    br label [[CHECK]]71; CHECK:       check:72; CHECK-NEXT:    call void @optnone()73; CHECK-NEXT:    [[V:%.*]] = load i32, ptr @G3, align 474; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i32 [[V]], 075; CHECK-NEXT:    call void @llvm.assume(i1 [[CMP]])76; CHECK-NEXT:    ret void77;78  br i1 %c, label %init, label %check79init:80  store i32 0, ptr @G381  br label %check82check:83  call void @optnone()84  %v = load i32, ptr @G385  %cmp = icmp eq i32 %v, 086  call void @llvm.assume(i1 %cmp)87  ret void88}89 90define void @optnone() optnone nosync nocallback noinline {91; CHECK: Function Attrs: nocallback noinline nosync optnone92; CHECK-LABEL: define {{[^@]+}}@optnone93; CHECK-SAME: () #[[ATTR0:[0-9]+]] {94; CHECK-NEXT:    ret void95;96  ret void97}98 99; Here hoisting is legal and we use it to verify it will happen.100define void @test_unknown_annotated(i1 %c) {101; CHECK-LABEL: define {{[^@]+}}@test_unknown_annotated102; CHECK-SAME: (i1 [[C:%.*]]) {103; CHECK-NEXT:    br i1 [[C]], label [[INIT:%.*]], label [[DOTCHECK_CRIT_EDGE:%.*]]104; CHECK:       .check_crit_edge:105; CHECK-NEXT:    [[V_PRE:%.*]] = load i32, ptr @G4, align 4106; CHECK-NEXT:    br label [[CHECK:%.*]]107; CHECK:       init:108; CHECK-NEXT:    store i32 0, ptr @G4, align 4109; CHECK-NEXT:    br label [[CHECK]]110; CHECK:       check:111; CHECK-NEXT:    [[V:%.*]] = phi i32 [ [[V_PRE]], [[DOTCHECK_CRIT_EDGE]] ], [ 0, [[INIT]] ]112; CHECK-NEXT:    call void @unknown_nosync_nocallback()113; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i32 [[V]], 0114; CHECK-NEXT:    call void @llvm.assume(i1 [[CMP]])115; CHECK-NEXT:    ret void116;117  br i1 %c, label %init, label %check118init:119  store i32 0, ptr @G4120  br label %check121check:122  call void @unknown_nosync_nocallback()123  %v = load i32, ptr @G4124  %cmp = icmp eq i32 %v, 0125  call void @llvm.assume(i1 %cmp)126  ret void127}128 129declare void @unknown()130declare void @unknown_nosync_nocallback() nosync nocallback131declare void @llvm.amdgcn.s.barrier()132declare void @llvm.assume(i1 noundef)133 134