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
187 lines
5.7 KiB
LLVM
187 lines
5.7 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc -mtriple=hexagon -hexagon-bit=false < %s | FileCheck %s
|
|
|
|
define bfloat @load_scalar_bf(ptr %addr) {
|
|
; CHECK-LABEL: load_scalar_bf:
|
|
; CHECK: .cfi_startproc
|
|
; CHECK-NEXT: // %bb.0: // %entry
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: [[REG:r[0-9]+]] = memuh(r0+#0)
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: r0 = aslh([[REG]])
|
|
; CHECK-NEXT: jumpr r31
|
|
; CHECK-NEXT: }
|
|
|
|
entry:
|
|
%0 = load bfloat, ptr %addr, align 2
|
|
ret bfloat %0
|
|
}
|
|
|
|
define void @store_scalar_bf(bfloat %v, ptr %addr) {
|
|
; CHECK-LABEL: store_scalar_bf:
|
|
; CHECK: .cfi_startproc
|
|
; CHECK-NEXT: // %bb.0: // %entry
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: [[R_A:r[0-9]+]] = ##131071
|
|
; CHECK-NEXT: [[R_B:r[0-9]+]] = ##32768
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: [[R_C:r[0-9]+]] = ##65535
|
|
; CHECK-NEXT: [[R_D:r[0-9]+]] = asrh(r0)
|
|
; CHECK-NEXT: [[R_A]] = and(r0,[[R_A]])
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: [[P0:p[0-9]+]] = sfclass(r0,#16)
|
|
; CHECK-NEXT: [[R_E:r[0-9]+]] = and(r0,[[R_B]])
|
|
; CHECK-NEXT: [[P1:p[0-9]+]] = cmp.eq([[R_A]],[[R_B]])
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: r0 = add(r0,[[R_E]])
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: r0 = asrh(r0)
|
|
; CHECK-NEXT: if ([[P1]]) [[R_B]] = and([[R_D]],[[R_C]])
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: if (![[P1]]) [[R_B]] = and(r0,[[R_C]])
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: if ([[P0]]) [[R_B]] = ##32767
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: jumpr r31
|
|
; CHECK-NEXT: memh(r1+#0) = [[R_B]]
|
|
; CHECK-NEXT: }
|
|
|
|
entry:
|
|
store bfloat %v, ptr %addr, align 2
|
|
ret void
|
|
}
|
|
|
|
define bfloat @sum(bfloat %a, bfloat %b) #0 {
|
|
; CHECK-LABEL: sum:
|
|
; CHECK: .cfi_startproc
|
|
; CHECK-NEXT: // %bb.0: // %entry
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: [[R3:r[0-9]+]] = ##32768
|
|
; CHECK-NEXT: [[R4:r[0-9]+]] = ##131071
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: [[R2:r[0-9]+]] = ##65535
|
|
; CHECK-NEXT: [[R6:r[0-9]+]] = and(r0,[[R3]])
|
|
; CHECK-NEXT: [[R5:r[0-9]+]] = and(r0,[[R4]])
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: [[R8:r[0-9]+]] = and(r1,[[R3]])
|
|
; CHECK-NEXT: [[R7:r[0-9]+]] = and(r1,[[R4]])
|
|
; CHECK-NEXT: [[R6]] = add(r0,[[R6]])
|
|
; CHECK-NEXT: [[P0:p[0-9]+]] = cmp.eq([[R5]],[[R3]])
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: [[R5]] = asrh(r0)
|
|
; CHECK-NEXT: [[P1:p[0-9]+]] = cmp.eq([[R7]],[[R3]])
|
|
; CHECK-NEXT: [[R7]] = asrh(r1)
|
|
; CHECK-NEXT: [[R8]] = add(r1,[[R8]])
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: [[R6]] = asrh([[R6]])
|
|
; CHECK-NEXT: if ([[P0]]) [[R5]] = and([[R5]],[[R2]])
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: [[P0]] = sfclass(r0,#16)
|
|
; CHECK-NEXT: if (![[P0]]) [[R5]] = and([[R6]],[[R2]])
|
|
; CHECK-NEXT: [[R6]] = asrh([[R8]])
|
|
; CHECK-NEXT: if ([[P1]]) [[R7]] = and([[R7]],[[R2]])
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: [[P1]] = sfclass(r1,#16)
|
|
; CHECK-NEXT: [[R0:r[0-9]+]] = #32767
|
|
; CHECK-NEXT: if (![[P1]]) [[R7]] = and([[R6]],[[R2]])
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: if ([[P0]]) [[R5]] = add([[R0]],#0)
|
|
; CHECK-NEXT: if ([[P1]]) [[R7]] = add([[R0]],#0)
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: [[R6]] = aslh([[R7]])
|
|
; CHECK-NEXT: [[R5]] = aslh([[R5]])
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: [[R1:r[0-9]+]] = sfadd([[R5]],[[R6]])
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: [[R5]] = and([[R1]],[[R3]])
|
|
; CHECK-NEXT: [[R4]] = and([[R1]],[[R4]])
|
|
; CHECK-NEXT: [[R6]] = asrh([[R1]])
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: [[P0]] = cmp.eq([[R4]],[[R3]])
|
|
; CHECK-NEXT: [[R5]] = add([[R1]],[[R5]])
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: [[R3]] = asrh([[R5]])
|
|
; CHECK-NEXT: if ([[P0]]) [[R4]] = and([[R6]],[[R2]])
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: [[P0]] = sfclass([[R1]],#16)
|
|
; CHECK-NEXT: if (![[P0]]) [[R4]] = and([[R3]],[[R2]])
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: if ([[P0]]) [[R4]] = add([[R0]],#0)
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: r0 = aslh([[R4]])
|
|
; CHECK-NEXT: jumpr r31
|
|
; CHECK-NEXT: }
|
|
|
|
entry:
|
|
%add = fadd bfloat %a, %b
|
|
ret bfloat %add
|
|
}
|
|
|
|
; Function Attrs: noinline nounwind optnone
|
|
define dso_local i32 @double_bf16(bfloat %a, bfloat %b) #0 {
|
|
; CHECK-LABEL: double_bf16:
|
|
; CHECK: .cfi_startproc
|
|
; CHECK-NEXT: // %bb.0: // %entry
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: [[PAIR_A:r[0-9]+:[0-9]+]] = convert_sf2df(r0)
|
|
; CHECK-NEXT: [[PAIR_B:r[0-9]+:[0-9]+]] = convert_sf2df(r1)
|
|
; CHECK-NEXT: [[SP:r[0-9]+]] = add([[SP]],#-16)
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: [[RESULT:r[0-9]+:[0-9]+]] = dfadd([[PAIR_A]],[[PAIR_B]])
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: memd([[SP]]+#8) = [[RESULT]]
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: [[TMP:r[0-9]+]] = convert_df2sf([[RESULT]])
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: [[TMP1:r[0-9]+]] = lsr([[TMP]],#16)
|
|
; CHECK-NEXT: [[R0:r[0-9]+]] = and([[TMP]],##-65536)
|
|
; CHECK-NEXT: memh([[SP]]+#6) = [[TMP1]].new
|
|
; CHECK-NEXT: }
|
|
; CHECK-NEXT: {
|
|
; CHECK-NEXT: [[R0]] = convert_sf2w([[R0]]):chop
|
|
; CHECK-NEXT: jumpr r31
|
|
; CHECK-NEXT: [[SP]] = add([[SP]],#16)
|
|
; CHECK-NEXT: }
|
|
|
|
entry:
|
|
%c = alloca double, align 8
|
|
%d = alloca bfloat, align 2
|
|
%conv = fpext bfloat %a to double
|
|
%conv1 = fpext bfloat %b to double
|
|
%add = fadd double %conv, %conv1
|
|
store double %add, ptr %c, align 8
|
|
%2 = load double, ptr %c, align 8
|
|
%conv2 = fptrunc double %2 to bfloat
|
|
store bfloat %conv2, ptr %d, align 2
|
|
%3 = load bfloat, ptr %d, align 2
|
|
%conv3 = fptosi bfloat %3 to i32
|
|
ret i32 %conv3
|
|
}
|