summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gallium/auxiliary/gallivm/lp_bld_arit_overflow.c33
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,