[llvm] pr/amdgpu closed world (PR #66488)
Anshil Gandhi via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 23 06:00:29 PDT 2024
gandhi56 wrote:
Hi @jdoerfert, thanks for working on this! I tried this patch on the following indirect call test but it seems to fail on AMDGPU, in spite of passing on X86:
```
; RUN: opt -S -mtriple=x86_64-unknown-linux-gnu -passes=attributor -attributor-assume-closed-world -o - %s | FileCheck %s --check-prefix=GENERIC
; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -passes=amdgpu-attributor -attributor-assume-closed-world -o - %s | FileCheck %s --check-prefix=AMDGPU
; Function Attrs: mustprogress nounwind uwtable
define dso_local noundef i32 @_Z3foov() #0 {
; GENERIC-LABEL: define dso_local noundef i32 @_Z3foov(
; GENERIC-SAME: ) #[[ATTR0:[0-9]+]] {
; GENERIC-NEXT: ret i32 1
;
; AMDGPU-LABEL: define dso_local noundef i32 @_Z3foov(
; AMDGPU-SAME: ) #[[ATTR0:[0-9]+]] {
; AMDGPU-NEXT: ret i32 1
;
ret i32 1
}
; Function Attrs: mustprogress nounwind uwtable
define dso_local noundef i32 @_Z3barv() #0 {
; GENERIC-LABEL: define dso_local noundef i32 @_Z3barv(
; GENERIC-SAME: ) #[[ATTR0]] {
; GENERIC-NEXT: ret i32 2
;
; AMDGPU-LABEL: define dso_local noundef i32 @_Z3barv(
; AMDGPU-SAME: ) #[[ATTR0]] {
; AMDGPU-NEXT: ret i32 2
;
ret i32 2
}
; Function Attrs: mustprogress norecurse uwtable
define amdgpu_kernel void @main(i32 noundef %0, ptr %out) #1 {
; GENERIC-LABEL: define amdgpu_kernel void @main(
; GENERIC: [[TMP11:%.*]] = call noundef i32 @_Z3barv()
; GENERIC: [[TMP14:%.*]] = call noundef i32 @_Z3foov()
;
; AMDGPU-LABEL: define amdgpu_kernel void @main(
; AMDGPU: [[TMP11:%.*]] = call noundef i32 @_Z3barv()
; AMDGPU: [[TMP14:%.*]] = call noundef i32 @_Z3foov()
;
%2 = alloca i32, align 4
%3 = alloca i32, align 4
%4 = alloca ptr, align 8
store i32 0, ptr %2, align 4
store i32 %0, ptr %3, align 4
call void @llvm.lifetime.start.p0(i64 8, ptr %4) #3
store ptr @_Z3foov, ptr %4, align 8
%5 = load i32, ptr %3, align 4
%6 = icmp ne i32 %5, 0
br i1 %6, label %7, label %8
7: ; preds = %1
store ptr @_Z3barv, ptr %4, align 8
br label %8
8: ; preds = %7, %1
%9 = load ptr, ptr %4, align 8
%10 = call noundef i32 %9()
store i32 %10, ptr %out, align 4
call void @llvm.lifetime.end.p0(i64 8, ptr %4) #3
ret void
}
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #2
; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #2
attributes #0 = { mustprogress nounwind uwtable }
attributes #1 = { mustprogress norecurse uwtable }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nounwind }
```
https://github.com/llvm/llvm-project/pull/66488
More information about the llvm-commits
mailing list