diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_arit_overflow.c | 33 |
1 files changed, 10 insertions, 23 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_arit_overflow.c b/src/gallium/auxiliary/gallivm/lp_bld_arit_overflow.c index 124381d87e4..91247fdbc95 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_arit_overflow.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_arit_overflow.c @@ -66,10 +66,8 @@ build_binary_int_overflow(struct gallivm_state *gallivm, char intr_str[256]; LLVMTypeRef type_ref; LLVMTypeKind type_kind; - LLVMTypeRef oelems[2] = { - LLVMInt32TypeInContext(gallivm->context), - LLVMInt1TypeInContext(gallivm->context) - }; + unsigned type_width; + LLVMTypeRef oelems[2]; LLVMValueRef oresult; LLVMTypeRef otype; @@ -78,26 +76,15 @@ build_binary_int_overflow(struct gallivm_state *gallivm, type_kind = LLVMGetTypeKind(type_ref); debug_assert(type_kind == LLVMIntegerTypeKind); + type_width = LLVMGetIntTypeWidth(type_ref); - switch (LLVMGetIntTypeWidth(type_ref)) { - case 16: - util_snprintf(intr_str, sizeof intr_str, "%s.i16", - intr_prefix); - oelems[0] = LLVMInt16TypeInContext(gallivm->context); - break; - case 32: - util_snprintf(intr_str, sizeof intr_str, "%s.i32", - intr_prefix); - oelems[0] = LLVMInt32TypeInContext(gallivm->context); - break; - case 64: - util_snprintf(intr_str, sizeof intr_str, "%s.i64", - intr_prefix); - oelems[0] = LLVMInt64TypeInContext(gallivm->context); - break; - default: - debug_assert(!"Unsupported integer width in overflow computation!"); - } + debug_assert(type_width == 16 || type_width == 32 || type_width == 64); + + util_snprintf(intr_str, sizeof intr_str, "%s.i%u", + intr_prefix, type_width); + + oelems[0] = type_ref; + oelems[1] = LLVMInt1TypeInContext(gallivm->context); otype = LLVMStructTypeInContext(gallivm->context, oelems, 2, FALSE); oresult = lp_build_intrinsic_binary(builder, intr_str, |