mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 04:38:03 +02:00
gallivm: don't use vector selects with llvm 3.7
llvm 3.7 sometimes simply miscompiles vector selects. See https://bugs.freedesktop.org/show_bug.cgi?id=94972 This was fixed in llvm r249669 (https://llvm.org/bugs/show_bug.cgi?id=24532). Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
This commit is contained in:
parent
b3616f1326
commit
d11111a551
1 changed files with 5 additions and 3 deletions
|
|
@ -315,14 +315,16 @@ lp_build_select(struct lp_build_context *bld,
|
|||
mask = LLVMBuildTrunc(builder, mask, LLVMInt1TypeInContext(lc), "");
|
||||
res = LLVMBuildSelect(builder, mask, a, b, "");
|
||||
}
|
||||
else if (LLVMIsConstant(mask) ||
|
||||
LLVMGetInstructionOpcode(mask) == LLVMSExt) {
|
||||
else if (!(HAVE_LLVM == 0x0307) &&
|
||||
(LLVMIsConstant(mask) ||
|
||||
LLVMGetInstructionOpcode(mask) == LLVMSExt)) {
|
||||
/* Generate a vector select.
|
||||
*
|
||||
* Using vector selects should avoid emitting intrinsics hence avoid
|
||||
* hidering optimization passes, but vector selects weren't properly
|
||||
* hindering optimization passes, but vector selects weren't properly
|
||||
* supported yet for a long time, and LLVM will generate poor code when
|
||||
* the mask is not the result of a comparison.
|
||||
* Also, llvm 3.7 may miscompile them (bug 94972).
|
||||
*/
|
||||
|
||||
/* Convert the mask to a vector of booleans.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue