brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · c7dd04c Raw
99 lines · plain
1; RUN: llvm-as < %s -disable-output 2>&1 | FileCheck %s -allow-empty2 3; RUN: llvm-as < %s | llvm-dis > %t1.ll4; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll5; RUN: diff %t1.ll %t2.ll6 7; RUN: llvm-as < %t1.ll -disable-output 2>&1 | FileCheck %s -allow-empty8 9; CHECK-NOT: error10; CHECK-NOT: warning11 12define void @mixed1() {13  call void @g() ; not convergent14  call void @f() ; uncontrolled convergent15  call void @g() ; not convergent16  ret void17}18 19define void @mixed2() {20  call void @g() ; not convergent21  %t1_tok1 = call token @llvm.experimental.convergence.anchor()22  call void @f() [ "convergencectrl"(token %t1_tok1) ]23  call void @g() ; not convergent24  ret void25}26 27; convergence control token can be used on non-convergent calls,28; but it has no effect.29define void @mixed3() {30  %t05_tok1 = call token @llvm.experimental.convergence.anchor()31  call void @g() [ "convergencectrl"(token %t05_tok1) ]32  ret void33}34 35define void @region_nesting1(i1 %arg) convergent {36A:37  %tok1 = call token @llvm.experimental.convergence.entry()38  %tok2 = call token @llvm.experimental.convergence.anchor()39  br label %B40 41B:42  br i1 %arg, label %C, label %D43 44C:45  call void @f() [ "convergencectrl"(token %tok1) ]46  ret void47 48D:49  call void @f() [ "convergencectrl"(token %tok2) ]50  ret void51}52 53; Mirror image of @region_nesting154define void @region_nesting2(i1 %arg) {55A:56  %tok1 = call token @llvm.experimental.convergence.anchor()57  %tok2 = call token @llvm.experimental.convergence.anchor()58  br label %B59 60B:61  br i1 %arg, label %C, label %D62 63C:64  call void @f() [ "convergencectrl"(token %tok2) ]65  ret void66 67D:68  call void @f() [ "convergencectrl"(token %tok1) ]69  ret void70}71 72define void @loop_nesting(i1 %arg) convergent {73A:74  %a = call token @llvm.experimental.convergence.entry()75  br label %B76 77B:78  %b = call token @llvm.experimental.convergence.anchor()79  br i1 %arg, label %C, label %D80 81C:82  %c = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token %b) ]83  call void @f() [ "convergencectrl"(token %c) ]84  br label %B85 86D:87  call void @f() [ "convergencectrl"(token %b) ]88  br i1 %arg, label %B, label %E89 90E:91  ret void92}93declare void @f() convergent94declare void @g()95 96declare token @llvm.experimental.convergence.entry()97declare token @llvm.experimental.convergence.anchor()98declare token @llvm.experimental.convergence.loop()99