llvm-project

Форк
0
/
convergence-control.ll 
91 строка · 2.0 Кб
1
; RUN: llvm-as < %s -disable-output 2>&1 | FileCheck %s -allow-empty
2

3
; RUN: llvm-as < %s | llvm-dis > %t1.ll
4
; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
5
; RUN: diff %t1.ll %t2.ll
6

7
; RUN: llvm-as < %t1.ll -disable-output 2>&1 | FileCheck %s -allow-empty
8

9
; CHECK-NOT: error
10
; CHECK-NOT: warning
11

12
define void @mixed1() {
13
  call void @g() ; not convergent
14
  call void @f() ; uncontrolled convergent
15
  call void @g() ; not convergent
16
  ret void
17
}
18

19
define void @mixed2() {
20
  call void @g() ; not convergent
21
  %t1_tok1 = call token @llvm.experimental.convergence.anchor()
22
  call void @f() [ "convergencectrl"(token %t1_tok1) ]
23
  call void @g() ; not convergent
24
  ret void
25
}
26

27

28
define void @region_nesting1() convergent {
29
A:
30
  %tok1 = call token @llvm.experimental.convergence.entry()
31
  %tok2 = call token @llvm.experimental.convergence.anchor()
32
  br label %B
33

34
B:
35
  br i1 undef, label %C, label %D
36

37
C:
38
  call void @f() [ "convergencectrl"(token %tok1) ]
39
  ret void
40

41
D:
42
  call void @f() [ "convergencectrl"(token %tok2) ]
43
  ret void
44
}
45

46
; Mirror image of @region_nesting1
47
define void @region_nesting2() {
48
A:
49
  %tok1 = call token @llvm.experimental.convergence.anchor()
50
  %tok2 = call token @llvm.experimental.convergence.anchor()
51
  br label %B
52

53
B:
54
  br i1 undef, label %C, label %D
55

56
C:
57
  call void @f() [ "convergencectrl"(token %tok2) ]
58
  ret void
59

60
D:
61
  call void @f() [ "convergencectrl"(token %tok1) ]
62
  ret void
63
}
64

65
define void @loop_nesting() convergent {
66
A:
67
  %a = call token @llvm.experimental.convergence.entry()
68
  br label %B
69

70
B:
71
  %b = call token @llvm.experimental.convergence.anchor()
72
  br i1 undef, label %C, label %D
73

74
C:
75
  %c = call token @llvm.experimental.convergence.loop() [ "convergencectrl"(token %b) ]
76
  call void @f() [ "convergencectrl"(token %c) ]
77
  br label %B
78

79
D:
80
  call void @f() [ "convergencectrl"(token %b) ]
81
  br i1 undef, label %B, label %E
82

83
E:
84
  ret void
85
}
86
declare void @f() convergent
87
declare void @g()
88

89
declare token @llvm.experimental.convergence.entry()
90
declare token @llvm.experimental.convergence.anchor()
91
declare token @llvm.experimental.convergence.loop()
92

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.