Skip to content

Commit 61ee0ea

Browse files
committed
Revised the nonsence cases and add new amdgpu case.
1 parent a060092 commit 61ee0ea

File tree

2 files changed

+67
-10
lines changed

2 files changed

+67
-10
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
2+
; RUN: opt -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -S -passes='require<domtree>,infer-address-spaces' %s | FileCheck %s
3+
4+
define void @test(ptr %lhs_ptr, ptr %rhs_ptr) {
5+
; CHECK-LABEL: define void @test(
6+
; CHECK-SAME: ptr [[LHS_PTR:%.*]], ptr [[RHS_PTR:%.*]]) #[[ATTR0:[0-9]+]] {
7+
; CHECK-NEXT: [[ENTRY:.*:]]
8+
; CHECK-NEXT: [[PTR_1:%.*]] = load ptr, ptr [[LHS_PTR]], align 8
9+
; CHECK-NEXT: [[TMP0:%.*]] = addrspacecast ptr [[PTR_1]] to ptr addrspace(3)
10+
; CHECK-NEXT: [[BOOL_1:%.*]] = tail call i1 @llvm.amdgcn.is.shared(ptr [[PTR_1]])
11+
; CHECK-NEXT: tail call void @llvm.assume(i1 [[BOOL_1]])
12+
; CHECK-NEXT: [[PTR_2:%.*]] = load ptr, ptr [[RHS_PTR]], align 8
13+
; CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr [[PTR_2]] to ptr addrspace(3)
14+
; CHECK-NEXT: [[BOOL_2:%.*]] = tail call i1 @llvm.amdgcn.is.shared(ptr [[PTR_2]])
15+
; CHECK-NEXT: tail call void @llvm.assume(i1 [[BOOL_2]])
16+
; CHECK-NEXT: br i1 poison, label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]
17+
; CHECK: [[IF_THEN]]:
18+
; CHECK-NEXT: [[V1:%.*]] = load i32, ptr null, align 4
19+
; CHECK-NEXT: br label %[[IF_SINK_SPLIT:.*]]
20+
; CHECK: [[IF_ELSE]]:
21+
; CHECK-NEXT: [[V2:%.*]] = load i32, ptr null, align 4
22+
; CHECK-NEXT: br label %[[IF_SINK_SPLIT]]
23+
; CHECK: [[IF_SINK_SPLIT]]:
24+
; CHECK-NEXT: [[PTR_SINK:%.*]] = phi ptr addrspace(3) [ [[TMP0]], %[[IF_THEN]] ], [ [[TMP1]], %[[IF_ELSE]] ]
25+
; CHECK-NEXT: [[V_SINK:%.*]] = phi i32 [ [[V1]], %[[IF_THEN]] ], [ [[V2]], %[[IF_ELSE]] ]
26+
; CHECK-NEXT: store i32 [[V_SINK]], ptr addrspace(3) [[PTR_SINK]], align 4
27+
; CHECK-NEXT: ret void
28+
;
29+
entry:
30+
%ptr.1 = load ptr, ptr %lhs_ptr, align 8
31+
%bool.1 = tail call i1 @llvm.amdgcn.is.shared(ptr %ptr.1)
32+
tail call void @llvm.assume(i1 %bool.1)
33+
34+
%ptr.2 = load ptr, ptr %rhs_ptr, align 8
35+
%bool.2 = tail call i1 @llvm.amdgcn.is.shared(ptr %ptr.2)
36+
tail call void @llvm.assume(i1 %bool.2)
37+
br i1 poison, label %if.then, label %if.else
38+
39+
if.then: ; preds = %entry
40+
%v1 = load i32, ptr null, align 4
41+
br label %if.sink.split
42+
43+
if.else: ; preds = %entry
44+
%v2 = load i32, ptr null, align 4
45+
br label %if.sink.split
46+
47+
if.sink.split: ; preds = %if.else, %if.then
48+
%ptr.sink = phi ptr [ %ptr.1, %if.then ], [ %ptr.2, %if.else ]
49+
%v.sink = phi i32 [ %v1, %if.then ], [ %v2, %if.else ]
50+
store i32 %v.sink, ptr %ptr.sink, align 4
51+
ret void
52+
}
53+
54+
declare void @llvm.assume(i1 noundef)
55+
declare i1 @llvm.amdgcn.is.shared(ptr)

llvm/test/Transforms/InferAddressSpaces/NVPTX/phinode-address-infer.ll

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
target triple = "nvptx64-nvidia-cuda"
88

99
declare void @llvm.assume(i1 noundef)
10-
declare i1 @llvm.nvvm.isspacep.shared(ptr) readnone noinline
11-
declare i1 @llvm.nvvm.isspacep.global(ptr) readnone noinline
10+
declare i1 @llvm.nvvm.isspacep.shared(ptr)
11+
declare i1 @llvm.nvvm.isspacep.global(ptr)
1212

13-
define ptr @phinode_instr() {
13+
define void @phinode_instr() {
1414
; CHECK-LABEL: @phinode_instr(
1515
; CHECK-NEXT: entry:
1616
; CHECK-NEXT: [[PTR_1:%.*]] = load ptr, ptr null, align 8
@@ -20,8 +20,8 @@ define ptr @phinode_instr() {
2020
; CHECK-NEXT: br label [[IF_SINK_SPLIT:%.*]]
2121
; CHECK: if.sink.split:
2222
; CHECK-NEXT: [[PTR_SINK:%.*]] = phi ptr addrspace(3) [ [[TMP0]], [[ENTRY:%.*]] ]
23-
; CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(3) [[PTR_SINK]] to ptr
24-
; CHECK-NEXT: ret ptr [[TMP1]]
23+
; CHECK-NEXT: store i32 1, ptr addrspace(3) [[PTR_SINK]], align 4
24+
; CHECK-NEXT: ret void
2525
;
2626
entry:
2727
%ptr.1 = load ptr, ptr null, align 8
@@ -31,10 +31,11 @@ entry:
3131

3232
if.sink.split: ; preds = %entry
3333
%ptr.sink = phi ptr [ %ptr.1, %entry ]
34-
ret ptr %ptr.sink
34+
store i32 1, ptr %ptr.sink, align 4
35+
ret void
3536
}
3637

37-
define ptr @phinode_argument(ptr %lhs_ptr) {
38+
define void @phinode_argument(ptr %lhs_ptr) {
3839
; CHECK-LABEL: @phinode_argument(
3940
; CHECK-NEXT: entry:
4041
; CHECK-NEXT: [[TMP0:%.*]] = addrspacecast ptr [[LHS_PTR:%.*]] to ptr addrspace(1)
@@ -43,8 +44,8 @@ define ptr @phinode_argument(ptr %lhs_ptr) {
4344
; CHECK-NEXT: br label [[IF_SINK_SPLIT:%.*]]
4445
; CHECK: if.sink.split:
4546
; CHECK-NEXT: [[PTR_SINK:%.*]] = phi ptr addrspace(1) [ [[TMP0]], [[ENTRY:%.*]] ]
46-
; CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(1) [[PTR_SINK]] to ptr
47-
; CHECK-NEXT: ret ptr [[TMP1]]
47+
; CHECK-NEXT: store i32 1, ptr addrspace(1) [[PTR_SINK]], align 4
48+
; CHECK-NEXT: ret void
4849
;
4950
entry:
5051
%bool.1 = tail call i1 @llvm.nvvm.isspacep.global(ptr %lhs_ptr)
@@ -53,5 +54,6 @@ entry:
5354

5455
if.sink.split: ; preds = %entry
5556
%ptr.sink = phi ptr [ %lhs_ptr, %entry ]
56-
ret ptr %ptr.sink
57+
store i32 1, ptr %ptr.sink, align 4
58+
ret void
5759
}

0 commit comments

Comments
 (0)