CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
231 lines
9.7 KiB
LLVM
231 lines
9.7 KiB
LLVM
; RUN: split-file %s %t
|
|
|
|
; RUN: opt -mtriple=amdgcn-- -passes=amdgpu-printf-runtime-binding -mcpu=fiji -S < %t/invalid-first-arg-addrspace.ll | FileCheck %t/invalid-first-arg-addrspace.ll
|
|
; RUN: opt -mtriple=amdgcn-- -passes=amdgpu-printf-runtime-binding -mcpu=fiji -S < %t/invalid-first-arg-type.ll | FileCheck %t/invalid-first-arg-type.ll
|
|
; RUN: opt -mtriple=amdgcn-- -passes=amdgpu-printf-runtime-binding -mcpu=fiji -S < %t/invalid-return.ll | FileCheck %t/invalid-return.ll
|
|
; RUN: opt -mtriple=amdgcn-- -passes=amdgpu-printf-runtime-binding -mcpu=fiji -S < %t/non-variadic.ll | FileCheck %t/non-variadic.ll
|
|
; RUN: opt -mtriple=amdgcn-- -passes=amdgpu-printf-runtime-binding -mcpu=fiji -S < %t/too-many-args.ll | FileCheck %t/too-many-args.ll
|
|
|
|
;--- invalid-first-arg-addrspace.ll
|
|
define amdgpu_kernel void @test_kernel(i32 %n) {
|
|
; CHECK-LABEL: define amdgpu_kernel void @test_kernel(
|
|
; CHECK-SAME: i32 [[N:%.*]]) #[[ATTR0:[0-9]+]] {
|
|
; CHECK-NEXT: [[ENTRY:.*:]]
|
|
; CHECK-NEXT: [[MEM:%.*]] = alloca i32, align 4, addrspace(5)
|
|
; CHECK-NEXT: [[STR:%.*]] = alloca [9 x i8], align 1, addrspace(5)
|
|
; CHECK-NEXT: [[CALL1:%.*]] = call i32 (ptr addrspace(5), ...) @printf(ptr addrspace(5) [[STR]], ptr addrspace(5) [[STR]], i32 [[N]])
|
|
; CHECK-NEXT: store i32 [[CALL1]], ptr addrspace(5) [[MEM]], align 4
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
entry:
|
|
%mem = alloca i32, align 4, addrspace(5)
|
|
%str = alloca [9 x i8], align 1, addrspace(5)
|
|
%call1 = call i32 (ptr addrspace(5), ...) @printf(ptr addrspace(5) %str, ptr addrspace(5) %str, i32 %n)
|
|
store i32 %call1, ptr addrspace(5) %mem, align 4
|
|
ret void
|
|
}
|
|
|
|
define i32 @test_func(i32 %n) {
|
|
; CHECK-LABEL: define i32 @test_func(
|
|
; CHECK-SAME: i32 [[N:%.*]]) #[[ATTR0]] {
|
|
; CHECK-NEXT: [[ENTRY:.*:]]
|
|
; CHECK-NEXT: [[STR:%.*]] = alloca [9 x i8], align 1, addrspace(5)
|
|
; CHECK-NEXT: [[CALL1:%.*]] = call i32 (ptr addrspace(5), ...) @printf(ptr addrspace(5) [[STR]], ptr addrspace(5) [[STR]], i32 [[N]])
|
|
; CHECK-NEXT: ret i32 [[CALL1]]
|
|
;
|
|
entry:
|
|
%str = alloca [9 x i8], align 1, addrspace(5)
|
|
%call1 = call i32 (ptr addrspace(5), ...) @printf(ptr addrspace(5) %str, ptr addrspace(5) %str, i32 %n)
|
|
ret i32 %call1
|
|
}
|
|
|
|
define i32 @test_null_argument(i32 %n) {
|
|
; CHECK-LABEL: define i32 @test_null_argument(
|
|
; CHECK-SAME: i32 [[N:%.*]]) #[[ATTR0]] {
|
|
; CHECK-NEXT: [[STR:%.*]] = alloca [9 x i8], align 1, addrspace(5)
|
|
; CHECK-NEXT: [[CALL1:%.*]] = call i32 (ptr addrspace(5), ...) @printf(ptr addrspace(5) null, ptr addrspace(5) [[STR]], i32 [[N]])
|
|
; CHECK-NEXT: ret i32 [[CALL1]]
|
|
;
|
|
%str = alloca [9 x i8], align 1, addrspace(5)
|
|
%call1 = call i32 (ptr addrspace(5), ...) @printf(ptr addrspace(5) zeroinitializer, ptr addrspace(5) %str, i32 %n)
|
|
ret i32 %call1
|
|
}
|
|
|
|
declare i32 @printf(ptr addrspace(5), ...)
|
|
|
|
;--- invalid-first-arg-type.ll
|
|
define amdgpu_kernel void @test_kernel(i32 %n) {
|
|
; CHECK-LABEL: define amdgpu_kernel void @test_kernel(
|
|
; CHECK-SAME: i32 [[N:%.*]]) #[[ATTR0:[0-9]+]] {
|
|
; CHECK-NEXT: [[ENTRY:.*:]]
|
|
; CHECK-NEXT: [[MEM:%.*]] = alloca float, align 4, addrspace(5)
|
|
; CHECK-NEXT: [[STR:%.*]] = alloca [9 x i8], align 1, addrspace(5)
|
|
; CHECK-NEXT: [[CALL1:%.*]] = call float (i32, ...) @printf(i32 [[N]], ptr addrspace(5) [[STR]], i32 [[N]])
|
|
; CHECK-NEXT: store float [[CALL1]], ptr addrspace(5) [[MEM]], align 4
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
entry:
|
|
%mem = alloca float, align 4, addrspace(5)
|
|
%str = alloca [9 x i8], align 1, addrspace(5)
|
|
%call1 = call float (i32, ...) @printf(i32 %n, ptr addrspace(5) %str, i32 %n)
|
|
store float %call1, ptr addrspace(5) %mem, align 4
|
|
ret void
|
|
}
|
|
|
|
define float @test_func(i32 %n) {
|
|
; CHECK-LABEL: define float @test_func(
|
|
; CHECK-SAME: i32 [[N:%.*]]) #[[ATTR0]] {
|
|
; CHECK-NEXT: [[ENTRY:.*:]]
|
|
; CHECK-NEXT: [[STR:%.*]] = alloca [9 x i8], align 1, addrspace(5)
|
|
; CHECK-NEXT: [[CALL1:%.*]] = call float (i32, ...) @printf(i32 [[N]], ptr addrspace(5) [[STR]], i32 [[N]])
|
|
; CHECK-NEXT: ret float [[CALL1]]
|
|
;
|
|
entry:
|
|
%str = alloca [9 x i8], align 1, addrspace(5)
|
|
%call1 = call float (i32, ...) @printf(i32 %n, ptr addrspace(5) %str, i32 %n)
|
|
ret float %call1
|
|
}
|
|
|
|
declare float @printf(i32, ...)
|
|
|
|
;--- invalid-return.ll
|
|
@.str = private unnamed_addr addrspace(4) constant [6 x i8] c"%s:%d\00", align 1
|
|
|
|
define amdgpu_kernel void @test_kernel(i32 %n) {
|
|
; CHECK-LABEL: define amdgpu_kernel void @test_kernel(
|
|
; CHECK-SAME: i32 [[N:%.*]]) #[[ATTR0:[0-9]+]] {
|
|
; CHECK-NEXT: [[ENTRY:.*:]]
|
|
; CHECK-NEXT: [[MEM:%.*]] = alloca float, align 4, addrspace(5)
|
|
; CHECK-NEXT: [[STR:%.*]] = alloca [9 x i8], align 1, addrspace(5)
|
|
; CHECK-NEXT: [[CALL1:%.*]] = call float (ptr addrspace(4), ...) @printf(ptr addrspace(4) @.str, ptr addrspace(5) [[STR]], i32 [[N]])
|
|
; CHECK-NEXT: store float [[CALL1]], ptr addrspace(5) [[MEM]], align 4
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
entry:
|
|
%mem = alloca float, align 4, addrspace(5)
|
|
%str = alloca [9 x i8], align 1, addrspace(5)
|
|
%call1 = call float (ptr addrspace(4), ...) @printf(ptr addrspace(4) @.str, ptr addrspace(5) %str, i32 %n)
|
|
store float %call1, ptr addrspace(5) %mem, align 4
|
|
ret void
|
|
}
|
|
|
|
define float @test_func(i32 %n) {
|
|
; CHECK-LABEL: define float @test_func(
|
|
; CHECK-SAME: i32 [[N:%.*]]) #[[ATTR0]] {
|
|
; CHECK-NEXT: [[ENTRY:.*:]]
|
|
; CHECK-NEXT: [[STR:%.*]] = alloca [9 x i8], align 1, addrspace(5)
|
|
; CHECK-NEXT: [[CALL1:%.*]] = call float (ptr addrspace(4), ...) @printf(ptr addrspace(4) @.str, ptr addrspace(5) [[STR]], i32 [[N]])
|
|
; CHECK-NEXT: ret float [[CALL1]]
|
|
;
|
|
entry:
|
|
%str = alloca [9 x i8], align 1, addrspace(5)
|
|
%call1 = call float (ptr addrspace(4), ...) @printf(ptr addrspace(4) @.str, ptr addrspace(5) %str, i32 %n)
|
|
ret float %call1
|
|
}
|
|
|
|
define float @test_null_argument(i32 %n) {
|
|
; CHECK-LABEL: define float @test_null_argument(
|
|
; CHECK-SAME: i32 [[N:%.*]]) #[[ATTR0]] {
|
|
; CHECK-NEXT: [[STR:%.*]] = alloca [9 x i8], align 1, addrspace(5)
|
|
; CHECK-NEXT: [[CALL1:%.*]] = call float (ptr addrspace(4), ...) @printf(ptr addrspace(4) null, ptr addrspace(5) [[STR]], i32 [[N]])
|
|
; CHECK-NEXT: ret float [[CALL1]]
|
|
;
|
|
%str = alloca [9 x i8], align 1, addrspace(5)
|
|
%call1 = call float (ptr addrspace(4), ...) @printf(ptr addrspace(4) null, ptr addrspace(5) %str, i32 %n)
|
|
ret float %call1
|
|
}
|
|
|
|
declare float @printf(ptr addrspace(4), ...)
|
|
|
|
;--- non-variadic.ll
|
|
@.str = private unnamed_addr addrspace(4) constant [6 x i8] c"%s:%d\00", align 1
|
|
|
|
define amdgpu_kernel void @test_kernel(i32 %n) {
|
|
; CHECK-LABEL: define amdgpu_kernel void @test_kernel(
|
|
; CHECK-SAME: i32 [[N:%.*]]) #[[ATTR0:[0-9]+]] {
|
|
; CHECK-NEXT: [[ENTRY:.*:]]
|
|
; CHECK-NEXT: [[MEM:%.*]] = alloca i32, align 4, addrspace(5)
|
|
; CHECK-NEXT: [[CALL1:%.*]] = call i32 @printf(ptr addrspace(4) @.str, i32 [[N]])
|
|
; CHECK-NEXT: store i32 [[CALL1]], ptr addrspace(5) [[MEM]], align 4
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
entry:
|
|
%mem = alloca i32, align 4, addrspace(5)
|
|
%call1 = call i32 (ptr addrspace(4), i32) @printf(ptr addrspace(4) @.str, i32 %n)
|
|
store i32 %call1, ptr addrspace(5) %mem, align 4
|
|
ret void
|
|
}
|
|
|
|
define i32 @test_func(i32 %n) {
|
|
; CHECK-LABEL: define i32 @test_func(
|
|
; CHECK-SAME: i32 [[N:%.*]]) #[[ATTR0]] {
|
|
; CHECK-NEXT: [[ENTRY:.*:]]
|
|
; CHECK-NEXT: [[CALL1:%.*]] = call i32 @printf(ptr addrspace(4) @.str, i32 [[N]])
|
|
; CHECK-NEXT: ret i32 [[CALL1]]
|
|
;
|
|
entry:
|
|
%call1 = call i32 (ptr addrspace(4), i32) @printf(ptr addrspace(4) @.str, i32 %n)
|
|
ret i32 %call1
|
|
}
|
|
|
|
define i32 @test_null_argument(i32 %n) {
|
|
; CHECK-LABEL: define i32 @test_null_argument(
|
|
; CHECK-SAME: i32 [[N:%.*]]) #[[ATTR0]] {
|
|
; CHECK-NEXT: [[CALL1:%.*]] = call i32 @printf(ptr addrspace(4) null, i32 [[N]])
|
|
; CHECK-NEXT: ret i32 [[CALL1]]
|
|
;
|
|
%call1 = call i32 (ptr addrspace(4), i32) @printf(ptr addrspace(4) null, i32 %n)
|
|
ret i32 %call1
|
|
}
|
|
|
|
declare i32 @printf(ptr addrspace(4), i32)
|
|
|
|
;--- too-many-args.ll
|
|
@.str = private unnamed_addr addrspace(4) constant [6 x i8] c"%s:%d\00", align 1
|
|
|
|
define amdgpu_kernel void @test_kernel(i32 %n) {
|
|
; CHECK-LABEL: define amdgpu_kernel void @test_kernel(
|
|
; CHECK-SAME: i32 [[N:%.*]]) #[[ATTR0:[0-9]+]] {
|
|
; CHECK-NEXT: [[ENTRY:.*:]]
|
|
; CHECK-NEXT: [[MEM:%.*]] = alloca float, align 4, addrspace(5)
|
|
; CHECK-NEXT: [[STR:%.*]] = alloca [9 x i8], align 1, addrspace(5)
|
|
; CHECK-NEXT: [[CALL1:%.*]] = call float (ptr addrspace(4), i32, ...) @printf(ptr addrspace(4) @.str, i32 [[N]], ptr addrspace(5) [[STR]], i32 [[N]])
|
|
; CHECK-NEXT: store float [[CALL1]], ptr addrspace(5) [[MEM]], align 4
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
entry:
|
|
%mem = alloca float, align 4, addrspace(5)
|
|
%str = alloca [9 x i8], align 1, addrspace(5)
|
|
%call1 = call float (ptr addrspace(4), i32, ...) @printf(ptr addrspace(4) @.str, i32 %n, ptr addrspace(5) %str, i32 %n)
|
|
store float %call1, ptr addrspace(5) %mem, align 4
|
|
ret void
|
|
}
|
|
|
|
define float @test_func(i32 %n) {
|
|
; CHECK-LABEL: define float @test_func(
|
|
; CHECK-SAME: i32 [[N:%.*]]) #[[ATTR0]] {
|
|
; CHECK-NEXT: [[ENTRY:.*:]]
|
|
; CHECK-NEXT: [[STR:%.*]] = alloca [9 x i8], align 1, addrspace(5)
|
|
; CHECK-NEXT: [[CALL1:%.*]] = call float (ptr addrspace(4), i32, ...) @printf(ptr addrspace(4) @.str, i32 [[N]], ptr addrspace(5) [[STR]], i32 [[N]])
|
|
; CHECK-NEXT: ret float [[CALL1]]
|
|
;
|
|
entry:
|
|
%str = alloca [9 x i8], align 1, addrspace(5)
|
|
%call1 = call float (ptr addrspace(4), i32, ...) @printf(ptr addrspace(4) @.str, i32 %n, ptr addrspace(5) %str, i32 %n)
|
|
ret float %call1
|
|
}
|
|
|
|
define float @test_null_argument(i32 %n) {
|
|
; CHECK-LABEL: define float @test_null_argument(
|
|
; CHECK-SAME: i32 [[N:%.*]]) #[[ATTR0]] {
|
|
; CHECK-NEXT: [[STR:%.*]] = alloca [9 x i8], align 1, addrspace(5)
|
|
; CHECK-NEXT: [[CALL1:%.*]] = call float (ptr addrspace(4), i32, ...) @printf(ptr addrspace(4) null, i32 [[N]], ptr addrspace(5) [[STR]], i32 [[N]])
|
|
; CHECK-NEXT: ret float [[CALL1]]
|
|
;
|
|
%str = alloca [9 x i8], align 1, addrspace(5)
|
|
%call1 = call float (ptr addrspace(4), i32, ...) @printf(ptr addrspace(4) null, i32 %n, ptr addrspace(5) %str, i32 %n)
|
|
ret float %call1
|
|
}
|
|
|
|
declare float @printf(ptr addrspace(4), i32, ...)
|