File: nvptx-aa.ll

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (113 lines) | stat: -rw-r--r-- 4,621 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
; RUN: opt -passes=aa-eval -aa-pipeline=nvptx-aa -print-all-alias-modref-info < %s -S 2>&1 \
; RUN:   | FileCheck %s --check-prefixes CHECK-ALIAS
;
; RUN: opt -aa-pipeline=nvptx-aa -passes=licm < %s -S | FileCheck %s --check-prefixes CHECK-AA-CONST
; RUN: opt -aa-pipeline=basic-aa -passes=licm < %s -S | FileCheck %s --check-prefixes CHECK-NOAA-CONST

target datalayout = "e-i64:64-v16:16-v32:32-n16:32:64"
target triple = "nvptx64-nvidia-cuda"

; CHECK-ALIAS-LABEL: Function: test
; CHECK-ALIAS: MayAlias: i8* %gen, i8 addrspace(1)* %global
; CHECK-ALIAS: MayAlias: i8* %gen, i8 addrspace(3)* %shared
; CHECK-ALIAS: NoAlias:  i8 addrspace(1)* %global, i8 addrspace(3)* %shared
; CHECK-ALIAS: MayAlias: i8 addrspace(4)* %const, i8* %gen
; CHECK-ALIAS: NoAlias:  i8 addrspace(4)* %const, i8 addrspace(1)* %global
; CHECK-ALIAS: NoAlias:  i8 addrspace(4)* %const, i8 addrspace(3)* %shared
; CHECK-ALIAS: MayAlias: i8* %gen, i8 addrspace(5)* %local
; CHECK-ALIAS: NoAlias:  i8 addrspace(1)* %global, i8 addrspace(5)* %local
; CHECK-ALIAS: NoAlias:  i8 addrspace(5)* %local, i8 addrspace(3)* %shared
; CHECK-ALIAS: NoAlias:  i8 addrspace(4)* %const, i8 addrspace(5)* %local
; CHECK-ALIAS: MayAlias: i8* %gen, i8 addrspace(101)* %param
; CHECK-ALIAS: NoAlias:  i8 addrspace(1)* %global, i8 addrspace(101)* %param
; CHECK-ALIAS: NoAlias:  i8 addrspace(101)* %param, i8 addrspace(3)* %shared
; CHECK-ALIAS: NoAlias:  i8 addrspace(4)* %const, i8 addrspace(101)* %param
; CHECK-ALIAS: NoAlias:  i8 addrspace(5)* %local, i8 addrspace(101)* %param

define i8 @test_alias(ptr %gen, ptr addrspace(1) %global, ptr addrspace(3) %shared, ptr addrspace(4) %const, ptr addrspace(5) %local) {
  %param = addrspacecast ptr %gen to ptr addrspace(101)
  %v1 = load i8, ptr %gen
  %v2 = load i8, ptr addrspace(1) %global
  %v3 = load i8, ptr addrspace(3) %shared
  %v4 = load i8, ptr addrspace(4) %const
  %v5 = load i8, ptr addrspace(5) %local
  %v6 = load i8, ptr addrspace(101) %param
  %res1 = add i8 %v1, %v2
  %res2 = add i8 %res1, %v3
  %res3 = add i8 %res2, %v4
  %res4 = add i8 %res3, %v5
  %res5 = add i8 %res4, %v6
  ret i8 %res5
}

; CHECK-ALIAS-LABEL: Function: test_const
; CHECK-ALIAS: MayAlias: i8* %gen, i8 addrspace(1)* %global
; CHECK-ALIAS: NoAlias:  i8 addrspace(4)* %const, i8 addrspace(1)* %global
; CHECK-ALIAS: MayAlias: i8 addrspace(4)* %const, i8* %gen
;
define i8 @test_const(ptr %gen, ptr addrspace(1) %global, ptr addrspace(4) %const) {
;
; Even though %gen and %const may alias and there is a store to %gen,
; LICM should be able to hoist %load_const because it is known to be
; constant (AA::pointsToConstantMemory()).
;
; CHECK-AA-CONST-LABEL: @test_const
; CHECK-AA-CONST-LABEL: entry
; CHECK-AA-CONST: %[[LOAD_CONST:.+]] = load i8, ptr addrspace(4)
; CHECK-AA-CONST-LABEL: loop
; CHECK-AA-CONST: add {{.*}}%[[LOAD_CONST]]
;
; Without NVPTX AA the load is left in the loop because we assume that
; it may be clobbered by the store.
;
; CHECK-NOAA-CONST-LABEL: @test_const
; CHECK-NOAA-CONST-LABEL: loop
; CHECK-NOAA-CONST: %[[LOAD_CONST:.+]] = load i8, ptr addrspace(4)
; CHECK-NOAA-CONST: add {{.*}}%[[LOAD_CONST]]
entry:
  br label %loop
loop:
  %v = phi i8 [0, %entry], [%v2, %loop]
  %load_global = load i8, ptr addrspace(1) %global
  store i8 %load_global, ptr %gen
  %load_const = load i8, ptr addrspace(4) %const
  %v2 = add i8 %v, %load_const
  %cond = icmp eq i8 %load_const, 0
  br i1 %cond, label %done, label %loop
done:
  ret i8 %v2
}

; Same as @test_const above, but for param space.
;
; CHECK-ALIAS-LABEL: Function: test_param
; CHECK-ALIAS: MayAlias: i8* %gen, i8 addrspace(1)* %global
; CHECK-ALIAS: NoAlias:  i8 addrspace(1)* %global, i8 addrspace(101)* %param
; CHECK-ALIAS: MayAlias: i8* %gen, i8 addrspace(101)* %param
;
define i8 @test_param(ptr %gen, ptr addrspace(1) %global, ptr %param_gen) {
;
; CHECK-AA-CONST-LABEL: @test_param
; CHECK-AA-CONST-LABEL: entry
; CHECK-AA-CONST: %[[LOAD_PARAM:.+]] = load i8, ptr addrspace(101)
; CHECK-AA-CONST-LABEL: loop
; CHECK-AA-CONST: add {{.*}}%[[LOAD_PARAM]]
;
; CHECK-NOAA-CONST-LABEL: @test_param
; CHECK-NOAA-CONST-LABEL: loop
; CHECK-NOAA-CONST: %[[LOAD_PARAM:.+]] = load i8, ptr addrspace(101)
; CHECK-NOAA-CONST: add {{.*}}%[[LOAD_PARAM]]
entry:
  %param = addrspacecast ptr %param_gen to ptr addrspace(101)
  br label %loop
loop:
  %v = phi i8 [0, %entry], [%v2, %loop]
  %load_global = load i8, ptr addrspace(1) %global
  store i8 %load_global, ptr %gen
  %load_const = load i8, ptr addrspace(101) %param
  %v2 = add i8 %v, %load_const
  %cond = icmp eq i8 %load_const, 0
  br i1 %cond, label %done, label %loop
done:
  ret i8 %v2
}