blob: f4b6892d8d50cc6180e20c9521427ec183fa3d0b [file] [log] [blame]
; 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
}