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
133 lines
5.0 KiB
LLVM
133 lines
5.0 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --extra_scrub --version 5
|
|
; RUN: llc < %s -mtriple=nvptx64 -mcpu=sm_70 -mattr=+ptx83 | FileCheck %s
|
|
; RUN: %if ptxas-sm_70 && ptxas-isa-8.3 %{ llc < %s -mtriple=nvptx64 -mcpu=sm_70 -mattr=+ptx83 | %ptxas-verify -arch=sm_70 %}
|
|
|
|
target triple = "nvptx64-nvidia-cuda"
|
|
|
|
@value = internal addrspace(1) global i128 0, align 16
|
|
|
|
define void @test_b128_input_from_const() {
|
|
; CHECK-LABEL: test_b128_input_from_const(
|
|
; CHECK: {
|
|
; CHECK-NEXT: .reg .b64 %rd<5>;
|
|
; CHECK-NEXT: .reg .b128 %rq<2>;
|
|
; CHECK-EMPTY:
|
|
; CHECK-NEXT: // %bb.0:
|
|
; CHECK-NEXT: mov.b64 %rd2, 0;
|
|
; CHECK-NEXT: mov.b64 %rd3, 42;
|
|
; CHECK-NEXT: mov.b128 %rq1, {%rd3, %rd2};
|
|
; CHECK-NEXT: mov.b64 %rd4, value;
|
|
; CHECK-NEXT: cvta.global.u64 %rd1, %rd4;
|
|
; CHECK-NEXT: // begin inline asm
|
|
; CHECK-NEXT: { st.b128 [%rd1], %rq1; }
|
|
; CHECK-NEXT: // end inline asm
|
|
; CHECK-NEXT: ret;
|
|
tail call void asm sideeffect "{ st.b128 [$0], $1; }", "l,q"(ptr nonnull addrspacecast (ptr addrspace(1) @value to ptr), i128 42)
|
|
ret void
|
|
}
|
|
|
|
define void @test_b128_input_from_load(ptr nocapture readonly %data) {
|
|
; CHECK-LABEL: test_b128_input_from_load(
|
|
; CHECK: {
|
|
; CHECK-NEXT: .reg .b64 %rd<7>;
|
|
; CHECK-NEXT: .reg .b128 %rq<2>;
|
|
; CHECK-EMPTY:
|
|
; CHECK-NEXT: // %bb.0:
|
|
; CHECK-NEXT: ld.param::func.b64 %rd2, [test_b128_input_from_load_param_0];
|
|
; CHECK-NEXT: cvta.to.global.u64 %rd3, %rd2;
|
|
; CHECK-NEXT: ld.global.v2.b64 {%rd4, %rd5}, [%rd3];
|
|
; CHECK-NEXT: mov.b64 %rd6, value;
|
|
; CHECK-NEXT: cvta.global.u64 %rd1, %rd6;
|
|
; CHECK-NEXT: mov.b128 %rq1, {%rd4, %rd5};
|
|
; CHECK-NEXT: // begin inline asm
|
|
; CHECK-NEXT: { st.b128 [%rd1], %rq1; }
|
|
; CHECK-NEXT: // end inline asm
|
|
; CHECK-NEXT: ret;
|
|
%1 = addrspacecast ptr %data to ptr addrspace(1)
|
|
%2 = load <2 x i64>, ptr addrspace(1) %1, align 16
|
|
%3 = bitcast <2 x i64> %2 to i128
|
|
tail call void asm sideeffect "{ st.b128 [$0], $1; }", "l,q"(ptr nonnull addrspacecast (ptr addrspace(1) @value to ptr), i128 %3)
|
|
ret void
|
|
}
|
|
|
|
define void @test_b128_input_from_select(ptr nocapture readonly %flag) {
|
|
; CHECK-LABEL: test_b128_input_from_select(
|
|
; CHECK: {
|
|
; CHECK-NEXT: .reg .pred %p<2>;
|
|
; CHECK-NEXT: .reg .b16 %rs<2>;
|
|
; CHECK-NEXT: .reg .b64 %rd<7>;
|
|
; CHECK-NEXT: .reg .b128 %rq<2>;
|
|
; CHECK-EMPTY:
|
|
; CHECK-NEXT: // %bb.0:
|
|
; CHECK-NEXT: ld.param::func.b64 %rd2, [test_b128_input_from_select_param_0];
|
|
; CHECK-NEXT: cvta.to.global.u64 %rd3, %rd2;
|
|
; CHECK-NEXT: ld.global.b8 %rs1, [%rd3];
|
|
; CHECK-NEXT: setp.eq.b16 %p1, %rs1, 0;
|
|
; CHECK-NEXT: selp.b64 %rd4, 24, 42, %p1;
|
|
; CHECK-NEXT: mov.b64 %rd5, 0;
|
|
; CHECK-NEXT: mov.b128 %rq1, {%rd4, %rd5};
|
|
; CHECK-NEXT: mov.b64 %rd6, value;
|
|
; CHECK-NEXT: cvta.global.u64 %rd1, %rd6;
|
|
; CHECK-NEXT: // begin inline asm
|
|
; CHECK-NEXT: { st.b128 [%rd1], %rq1; }
|
|
; CHECK-NEXT: // end inline asm
|
|
; CHECK-NEXT: ret;
|
|
%1 = addrspacecast ptr %flag to ptr addrspace(1)
|
|
%2 = load i8, ptr addrspace(1) %1, align 1
|
|
%3 = icmp eq i8 %2, 0
|
|
%4 = select i1 %3, i128 24, i128 42
|
|
tail call void asm sideeffect "{ st.b128 [$0], $1; }", "l,q"(ptr nonnull addrspacecast (ptr addrspace(1) @value to ptr), i128 %4)
|
|
ret void
|
|
}
|
|
|
|
define void @test_store_b128_output() {
|
|
; CHECK-LABEL: test_store_b128_output(
|
|
; CHECK: {
|
|
; CHECK-NEXT: .reg .b64 %rd<5>;
|
|
; CHECK-NEXT: .reg .b128 %rq<2>;
|
|
; CHECK-EMPTY:
|
|
; CHECK-NEXT: // %bb.0:
|
|
; CHECK-NEXT: // begin inline asm
|
|
; CHECK-NEXT: { mov.b128 %rq1, 41; }
|
|
; CHECK-NEXT: // end inline asm
|
|
; CHECK-NEXT: mov.b128 {%rd1, %rd2}, %rq1;
|
|
; CHECK-NEXT: add.cc.s64 %rd3, %rd1, 1;
|
|
; CHECK-NEXT: addc.cc.s64 %rd4, %rd2, 0;
|
|
; CHECK-NEXT: st.global.v2.b64 [value], {%rd3, %rd4};
|
|
; CHECK-NEXT: ret;
|
|
%1 = tail call i128 asm "{ mov.b128 $0, 41; }", "=q"()
|
|
%add = add nsw i128 %1, 1
|
|
%2 = bitcast i128 %add to <2 x i64>
|
|
store <2 x i64> %2, ptr addrspace(1) @value, align 16
|
|
ret void
|
|
}
|
|
|
|
define void @test_use_of_b128_output(ptr nocapture readonly %data) {
|
|
; CHECK-LABEL: test_use_of_b128_output(
|
|
; CHECK: {
|
|
; CHECK-NEXT: .reg .b64 %rd<9>;
|
|
; CHECK-NEXT: .reg .b128 %rq<3>;
|
|
; CHECK-EMPTY:
|
|
; CHECK-NEXT: // %bb.0:
|
|
; CHECK-NEXT: ld.param::func.b64 %rd1, [test_use_of_b128_output_param_0];
|
|
; CHECK-NEXT: cvta.to.global.u64 %rd2, %rd1;
|
|
; CHECK-NEXT: ld.global.v2.b64 {%rd3, %rd4}, [%rd2];
|
|
; CHECK-NEXT: mov.b128 %rq2, {%rd3, %rd4};
|
|
; CHECK-NEXT: // begin inline asm
|
|
; CHECK-NEXT: { mov.b128 %rq1, %rq2; }
|
|
; CHECK-NEXT: // end inline asm
|
|
; CHECK-NEXT: mov.b128 {%rd5, %rd6}, %rq1;
|
|
; CHECK-NEXT: add.cc.s64 %rd7, %rd5, 1;
|
|
; CHECK-NEXT: addc.cc.s64 %rd8, %rd6, 0;
|
|
; CHECK-NEXT: st.global.v2.b64 [value], {%rd7, %rd8};
|
|
; CHECK-NEXT: ret;
|
|
%1 = addrspacecast ptr %data to ptr addrspace(1)
|
|
%2 = load <2 x i64>, ptr addrspace(1) %1, align 16
|
|
%3 = bitcast <2 x i64> %2 to i128
|
|
%4 = tail call i128 asm "{ mov.b128 $0, $1; }", "=q,q"(i128 %3)
|
|
%add = add nsw i128 %4, 1
|
|
%5 = bitcast i128 %add to <2 x i64>
|
|
store <2 x i64> %5, ptr addrspace(1) @value, align 16
|
|
ret void
|
|
}
|