/
redgpu
/
clspv
Обзор
Документация
Войти
/
redgpu
/
clspv
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
test/widen_switch_condition_binary_ops.ll
85 строк
2 KB
alan-baker
Expand functionality to catch odd truncates (#585)
21 май 2020, 00:56
Не верифицирован
21 май 2020, 00:56
e711c76
Код
Авторство
О чём код?
; RUN: clspv-opt -UndoTruncateToOddInteger %s -o %t ; RUN: FileCheck %s < %t target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024" target triple = "spir-unknown-unknown" define spir_kernel void @subf(i32 %x, i32 %y) { entry: ; CHECK-LABEL subf ; CHECK: [[and:%[a-zA-Z0-9_]+]] = and i32 %mul, 7 ; CHECK-NEXT: [[sub:%[a-zA-Z0-9_]+]] = sub i32 4, [[and]] ; CHECK-NEXT: [[sub_mask:%[a-zA-Z0-9_]+]] = and i32 [[sub]], 7 ; CHECK-NEXT: switch i32 [[sub_mask]], label %default [ ; CHECK-NEXT: i32 1, label %one_label ; CHECK-NEXT: i32 2, label %two_label ; CHECK-NEXT: i32 3, label %three_label ; CHECK-NEXT: i32 4, label %four_label %mul = mul i32 %x, %y %trunc = trunc i32 %mul to i3 %sub = sub nuw i3 -4, %trunc switch i3 %sub, label %default [ i3 1, label %one_label i3 2, label %two_label i3 3, label %three_label i3 -4, label %four_label ] default: br label %exit one_label: br label %exit two_label: br label %exit three_label: br label %exit four_label: br label %exit exit: ret void } define spir_kernel void @addf(i32 %x, i32 %y) { entry: ; CHECK-LABEL addf ; CHECK: [[and:%[a-zA-Z0-9_]+]] = and i32 %mul, 31 ; CHECK-NEXT: [[add:%[a-zA-Z0-9_]+]] = add i32 16, [[and]] ; CHECK-NEXT: [[add_mask:%[a-zA-Z0-9_]+]] = and i32 [[add]], 31 ; CHECK-NEXT: switch i32 [[add_mask]], label %default [ ; CHECK-NEXT: i32 1, label %one_label ; CHECK-NEXT: i32 2, label %two_label ; CHECK-NEXT: i32 3, label %three_label ; CHECK-NEXT: i32 16, label %sixteen_label %mul = mul i32 %x, %y %trunc = trunc i32 %mul to i5 %add = add nuw i5 -16, %trunc switch i5 %add, label %default [ i5 1, label %one_label i5 2, label %two_label i5 3, label %three_label i5 -16, label %sixteen_label ] default: br label %exit one_label: br label %exit two_label: br label %exit three_label: br label %exit sixteen_label: br label %exit exit: ret void }