瀏覽代碼

gallivm: Warn when doing inefficient integer comparisons.

tags/snb-magic
José Fonseca 15 年之前
父節點
當前提交
6b0c79e058
共有 1 個檔案被更改,包括 18 行新增2 行删除
  1. 18
    2
      src/gallium/auxiliary/gallivm/lp_bld_logic.c

+ 18
- 2
src/gallium/auxiliary/gallivm/lp_bld_logic.c 查看文件

@@ -92,9 +92,23 @@ lp_build_compare(LLVMBuilderRef builder,
if(func == PIPE_FUNC_ALWAYS)
return ones;

/* TODO: optimize the constant case */
#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64)
/*
* There are no unsigned integer comparison instructions in SSE.
*/

/* XXX: It is not clear if we should use the ordered or unordered operators */
if (!type.floating && !type.sign &&
type.width * type.length == 128 &&
util_cpu_caps.has_sse2 &&
(func == PIPE_FUNC_LESS ||
func == PIPE_FUNC_LEQUAL ||
func == PIPE_FUNC_GREATER ||
func == PIPE_FUNC_GEQUAL) &&
(gallivm_debug & GALLIVM_DEBUG_PERF)) {
debug_printf("%s: inefficient <%u x i%u> unsigned comparison\n",
__FUNCTION__, type.length, type.width);
}
#endif

#if HAVE_LLVM < 0x0207
#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64)
@@ -225,6 +239,8 @@ lp_build_compare(LLVMBuilderRef builder,
#endif
#endif /* HAVE_LLVM < 0x0207 */

/* XXX: It is not clear if we should use the ordered or unordered operators */

if(type.floating) {
LLVMRealPredicate op;
switch(func) {

Loading…
取消
儲存