44 lines
1.3 KiB
LLVM
44 lines
1.3 KiB
LLVM
; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s
|
|
|
|
; CHECK-DAG: OpExtension "SPV_KHR_no_integer_wrap_decoration"
|
|
|
|
; CHECK-NOT: DAG-FENCE
|
|
|
|
; CHECK-DAG: OpName %[[#NO_WRAP_TEST:]] "no_wrap_test"
|
|
; CHECK-DAG: OpName %[[#A:]] "a"
|
|
; CHECK-DAG: OpName %[[#B:]] "b"
|
|
; CHECK-DAG: OpName %[[#C:]] "c"
|
|
; CHECK-DAG: OpName %[[#D:]] "d"
|
|
; CHECK-DAG: OpName %[[#E:]] "e"
|
|
|
|
; CHECK-NOT: DAG-FENCE
|
|
|
|
; CHECK-DAG: OpDecorate %[[#C]] NoUnsignedWrap
|
|
; CHECK-DAG: OpDecorate %[[#D]] NoSignedWrap
|
|
; CHECK-DAG: OpDecorate %[[#E]] NoUnsignedWrap
|
|
; CHECK-DAG: OpDecorate %[[#E]] NoSignedWrap
|
|
|
|
; CHECK-NOT: DAG-FENCE
|
|
|
|
; CHECK-DAG: %[[#I32:]] = OpTypeInt 32
|
|
; CHECK-DAG: %[[#FN:]] = OpTypeFunction %[[#I32]] %[[#I32]] %[[#I32]]
|
|
|
|
; CHECK-NOT: DAG-FENCE
|
|
|
|
define i32 @no_wrap_test(i32 %a, i32 %b) {
|
|
%c = mul nuw i32 %a, %b
|
|
%d = mul nsw i32 %a, %b
|
|
%e = add nuw nsw i32 %c, %d
|
|
ret i32 %e
|
|
}
|
|
|
|
; CHECK: %[[#NO_WRAP_TEST]] = OpFunction %[[#I32]] None %[[#FN]]
|
|
; CHECK-NEXT: %[[#A]] = OpFunctionParameter %[[#I32]]
|
|
; CHECK-NEXT: %[[#B]] = OpFunctionParameter %[[#I32]]
|
|
; CHECK: OpLabel
|
|
; CHECK: %[[#C]] = OpIMul %[[#I32]] %[[#A]] %[[#B]]
|
|
; CHECK: %[[#D]] = OpIMul %[[#I32]] %[[#A]] %[[#B]]
|
|
; CHECK: %[[#E]] = OpIAdd %[[#I32]] %[[#C]] %[[#D]]
|
|
; CHECK: OpReturnValue %[[#E]]
|
|
; CHECK-NEXT: OpFunctionEnd
|