Bug 86432 - llvm Unreal Elemental rendering regression
Summary: llvm Unreal Elemental rendering regression
Status: RESOLVED FIXED
Alias: None
Product: Mesa
Classification: Unclassified
Component: Drivers/Gallium/radeonsi (show other bugs)
Version: git
Hardware: Other All
: medium normal
Assignee: Default DRI bug account
QA Contact:
URL:
Whiteboard:
Keywords:
: 86490 (view as bug list)
Depends on:
Blocks:
 
Reported: 2014-11-18 12:33 UTC by Andy Furniss
Modified: 2014-11-25 07:23 UTC (History)
2 users (show)

See Also:
i915 platform:
i915 features:


Attachments
workaround (1.19 KB, patch)
2014-11-18 15:08 UTC, Marek Olšák
Details | Splinter Review
Tentative fix (1.74 KB, patch)
2014-11-18 21:40 UTC, Matt Arsenault
Details | Splinter Review
clang build fail with Tentative fix (8.20 KB, text/plain)
2014-11-18 22:52 UTC, Andy Furniss
Details

Description Andy Furniss 2014-11-18 12:33:53 UTC

    
Comment 1 Andy Furniss 2014-11-18 12:35:42 UTC
radeonsi R9270X I am getting mainly black screen with just a few frames/blocks correct since llvm commit -

6f485c0bc532ae7954ca5e0f3fe50a5558b64883 is the first bad commit
commit 6f485c0bc532ae7954ca5e0f3fe50a5558b64883
Author: Matt Arsenault <Matthew.Arsenault@amd.com>
Date:   Thu Nov 13 23:03:09 2014 +0000

    R600/SI: Fix fmin_legacy / fmax_legacy matching for SI
    
    select_cc is expanded on SI, so this was never matched.
Comment 2 Marek Olšák 2014-11-18 15:08:36 UTC
Created attachment 109675 [details] [review]
workaround

Can you test this LLVM patch. It's not a final fix.
Comment 3 Andy Furniss 2014-11-18 17:30:50 UTC
(In reply to Marek Olšák from comment #2)
> Created attachment 109675 [details] [review] [review]
> workaround
> 
> Can you test this LLVM patch. It's not a final fix.

It doesn't apply to head, so testing reset on the bad commit - Yes it does workaround the issue.
Comment 4 Matt Arsenault 2014-11-18 21:40:51 UTC
Created attachment 109693 [details] [review]
Tentative fix

I think this is because I was assuming this would only ever see ordered comparisons. This tries disabling the combine for unordered compares
Comment 5 Marek Olšák 2014-11-18 21:44:52 UTC
(In reply to Matt Arsenault from comment #4)
> Created attachment 109693 [details] [review] [review]
> Tentative fix
> 
> I think this is because I was assuming this would only ever see ordered
> comparisons. This tries disabling the combine for unordered compares

Your patch fixes this issue.
Comment 6 Andy Furniss 2014-11-18 22:52:54 UTC
Created attachment 109694 [details]
clang build fail with Tentative fix

I get a build fail with this - I build OK same tree without patch.

clang is roughly from same tree, though I deleted tools/clang when doing the bisect and haven't reinstated yet.
Comment 7 Andy Furniss 2014-11-18 23:11:21 UTC
(In reply to Andy Furniss from comment #6)
> Created attachment 109694 [details]
> clang build fail with Tentative fix
> 
> I get a build fail with this - I build OK same tree without patch.
> 
> clang is roughly from same tree, though I deleted tools/clang when doing the
> bisect and haven't reinstated yet.

Never mind - I've upgraded GCC - for whatever reason it didn't care or error initially even though I cleaned + git clean -dfx + git reset hard origin/master.

Now I do it and it bails early in the configure -

We detected a missing feature in the standard C++ library that was known to be
missing in libstdc++4.6 and implemented in libstdc++4.7. There are numerous
C++11 problems with 4.6's library, and we don't support GCCs or libstdc++ older
than 4.7. You will need to update your system and ensure Clang uses the newer
standard library.

Which is confusing as I've just upgraded from gcc 4.8.3 to 4.9.2.

Maybe I need to try rebuilding llvm/clang with gcc.
Comment 8 Andy Furniss 2014-11-18 23:18:37 UTC
Comment on attachment 109694 [details]
clang build fail with Tentative fix

>make[3]: Entering directory '/mnt/sdb1/Src64/llvm/lib/Target/R600'
>llvm[3]: Compiling AMDGPUISelLowering.cpp for Release+Asserts build
>clang: /mnt/sdb1/Src64/llvm/include/llvm/Support/Casting.h:237: typename cast_retty<X, Y *>::ret_type llvm::cast(Y *) [X = llvm::CallInst, Y = llvm::Instruction]: Assertion `isa<X>(Val) && "cast<Ty>() argument of incompatible type!"' failed.
>#0 0x7fa42bcc70b8 llvm::sys::PrintStackTrace(_IO_FILE*) (/usr/bin/../lib/libLLVM-3.6svn.so+0x4230b8)
>#1 0x7fa42bcc883b SignalHandler(int) (/usr/bin/../lib/libLLVM-3.6svn.so+0x42483b)
>#2 0x7fa42b4812a0 __restore_rt (/lib/libpthread.so.0+0xf2a0)
>#3 0x7fa42a27e985 __GI_raise /sources/eglibc-2.15/signal/../nptl/sysdeps/unix/sysv/linux/raise.c:64:0
>#4 0x7fa42a281aab __GI_abort /sources/eglibc-2.15/stdlib/abort.c:93:0
>#5 0x7fa42a2779de __assert_fail_base /sources/eglibc-2.15/assert/assert.c:55:0
>#6 0x7fa42a277a82 (/lib/libc.so.6+0x2da82)
>#7 0x8a43b7 clang::CodeGen::CodeGenFunction::EmitCall(clang::CodeGen::CGFunctionInfo const&, llvm::Value*, clang::CodeGen::ReturnValueSlot, clang::CodeGen::CallArgList const&, clang::Decl const*, llvm::Instruction**) (/usr/bin/clang+0x8a43b7)
>#8 0x8eab51 clang::CodeGen::CodeGenFunction::EmitCXXMemberOrOperatorCall(clang::CXXMethodDecl const*, llvm::Value*, clang::CodeGen::ReturnValueSlot, llvm::Value*, llvm::Value*, clang::QualType, clang::CallExpr const*) (/usr/bin/clang+0x8eab51)
>#9 0x8ebb5e clang::CodeGen::CodeGenFunction::EmitCXXMemberCallExpr(clang::CXXMemberCallExpr const*, clang::CodeGen::ReturnValueSlot) (/usr/bin/clang+0x8ebb5e)
>#10 0x8e053b clang::CodeGen::CodeGenFunction::EmitCallExpr(clang::CallExpr const*, clang::CodeGen::ReturnValueSlot) (/usr/bin/clang+0x8e053b)
>#11 0x909ade (/usr/bin/clang+0x909ade)
>#12 0x8f9943 clang::CodeGen::CodeGenFunction::EmitScalarExpr(clang::Expr const*, bool) (/usr/bin/clang+0x8f9943)
>#13 0x8b9e19 clang::CodeGen::CodeGenFunction::EmitScalarInit(clang::Expr const*, clang::ValueDecl const*, clang::CodeGen::LValue, bool) (/usr/bin/clang+0x8b9e19)
>#14 0x8bca2e clang::CodeGen::CodeGenFunction::EmitExprAsInit(clang::Expr const*, clang::ValueDecl const*, clang::CodeGen::LValue, bool) (/usr/bin/clang+0x8bca2e)
>#15 0x8bb9ed clang::CodeGen::CodeGenFunction::EmitAutoVarInit(clang::CodeGen::CodeGenFunction::AutoVarEmission const&) (/usr/bin/clang+0x8bb9ed)
>#16 0x8b880a clang::CodeGen::CodeGenFunction::EmitVarDecl(clang::VarDecl const&) (/usr/bin/clang+0x8b880a)
>#17 0x7daa7c clang::CodeGen::CodeGenFunction::EmitDeclStmt(clang::DeclStmt const&) (/usr/bin/clang+0x7daa7c)
>#18 0x7d32b4 clang::CodeGen::CodeGenFunction::EmitSimpleStmt(clang::Stmt const*) (/usr/bin/clang+0x7d32b4)
>#19 0x7d230f clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*) (/usr/bin/clang+0x7d230f)
>#20 0x7db4ab clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(clang::CompoundStmt const&, bool, clang::CodeGen::AggValueSlot) (/usr/bin/clang+0x7db4ab)
>#21 0x7efa47 clang::CodeGen::CodeGenFunction::EmitFunctionBody(clang::CodeGen::FunctionArgList&, clang::Stmt const*) (/usr/bin/clang+0x7efa47)
>#22 0x7f002a clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&) (/usr/bin/clang+0x7f002a)
>#23 0x7ff21f clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl, llvm::GlobalValue*) (/usr/bin/clang+0x7ff21f)
>#24 0x7fc049 clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) (/usr/bin/clang+0x7fc049)
>#25 0x800c31 clang::CodeGen::CodeGenModule::EmitTopLevelDecl(clang::Decl*) (/usr/bin/clang+0x800c31)
>#26 0x79fe9f (/usr/bin/clang+0x79fe9f)
>#27 0x796d47 (/usr/bin/clang+0x796d47)
>#28 0x99ebc3 clang::ParseAST(clang::Sema&, bool, bool) (/usr/bin/clang+0x99ebc3)
>#29 0x5a86ae clang::FrontendAction::Execute() (/usr/bin/clang+0x5a86ae)
>#30 0x57b87c clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/usr/bin/clang+0x57b87c)
>#31 0x55dc62 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/usr/bin/clang+0x55dc62)
>#32 0x5548ed cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/bin/clang+0x5548ed)
>#33 0x55c2e2 main (/usr/bin/clang+0x55c2e2)
>#34 0x7fa42a26b36d __libc_start_main /sources/eglibc-2.15/csu/libc-start.c:258:0
>#35 0x5545d5 _start (/usr/bin/clang+0x5545d5)
>Stack dump:
>0.      Program arguments: /usr/bin/clang -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -disable-free -main-file-name AMDGPUISelLowering.cpp -mrelocation-model pic -pic-level 2 -mthread-model posix -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -target-linker-version 2.23 -momit-leaf-frame-pointer -dwarf-column-info -ffunction-sections -fdata-sections -coverage-file /mnt/sdb1/Src64/llvm/lib/Target/R600/Release+Asserts/AMDGPUISelLowering.o -resource-dir /usr/bin/../lib/clang/3.6.0 -dependency-file /mnt/sdb1/Src64/llvm/lib/Target/R600/Release+Asserts/AMDGPUISelLowering.d.tmp -MP -MT /mnt/sdb1/Src64/llvm/lib/Target/R600/Release+Asserts/AMDGPUISelLowering.o -MT /mnt/sdb1/Src64/llvm/lib/Target/R600/Release+Asserts/AMDGPUISelLowering.d -D _DEBUG -D _GNU_SOURCE -D __STDC_CONSTANT_MACROS -D __STDC_FORMAT_MACROS -D __STDC_LIMIT_MACROS -I /mnt/sdb1/Src64/llvm/include -I /mnt/sdb1/Src64/llvm/lib/Target/R600 -internal-isystem /usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../include/c++/4.9.2 -internal-isystem /usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../include/c++/4.9.2/x86_64-unknown-linux-gnu -internal-isystem /usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../include/c++/4.9.2/backward -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/clang/3.6.0/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O3 -Wcast-qual -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcovered-switch-default -Wno-uninitialized -Wno-missing-field-initializers -Wno-comment -pedantic -std=c++11 -fdeprecated-macro -fdebug-compilation-dir /mnt/sdb1/Src64/llvm/lib/Target/R600 -ferror-limit 19 -fmessage-length 239 -fvisibility-inlines-hidden -mstackrealign -fno-rtti -fobjc-runtime=gcc -fdiagnostics-show-option -fcolor-diagnostics -vectorize-loops -vectorize-slp -o /mnt/sdb1/Src64/llvm/lib/Target/R600/Release+Asserts/AMDGPUISelLowering.o -x c++ AMDGPUISelLowering.cpp 
>1.      AMDGPUISelLowering.cpp:97:1: current parser token 'EVT'
>2.      AMDGPUISelLowering.cpp:87:27: LLVM IR generation of declaration 'llvm::AMDGPUTargetLowering::getEquivalentMemType'
>3.      AMDGPUISelLowering.cpp:87:27: Generating code for declaration 'llvm::AMDGPUTargetLowering::getEquivalentMemType'
>clang: error: unable to execute command: Aborted
>clang: error: clang frontend command failed due to signal (use -v to see invocation)
>clang version 3.6.0 (http://llvm.org/git/clang.git f98071d4eacb44e7f36b4fd9878f415524a6efda) (http://llvm.org/git/llvm.git ab9c404bbdceead0ced57d5e805eeeb28941de35)
>Target: x86_64-unknown-linux-gnu
>Thread model: posix
>clang: note: diagnostic msg: PLEASE submit a bug report to http://llvm.org/bugs/ and include the crash backtrace, preprocessed source, and associated run script.
>clang: note: diagnostic msg: 
>********************
>
>PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
>Preprocessed source(s) and associated run script(s) are located at:
>clang: note: diagnostic msg: /tmp/AMDGPUISelLowering-03f4c1.cpp
>clang: note: diagnostic msg: /tmp/AMDGPUISelLowering-03f4c1.sh
>clang: note: diagnostic msg: 
>
>********************
>/bin/rm: cannot remove â/mnt/sdb1/Src64/llvm/lib/Target/R600/Release+Asserts/AMDGPUISelLowering.d.tmpâ: No such file or directory
>/mnt/sdb1/Src64/llvm/Makefile.rules:1514: recipe for target '/mnt/sdb1/Src64/llvm/lib/Target/R600/Release+Asserts/AMDGPUISelLowering.o' failed
>make[3]: *** [/mnt/sdb1/Src64/llvm/lib/Target/R600/Release+Asserts/AMDGPUISelLowering.o] Error 1
>make[3]: Leaving directory '/mnt/sdb1/Src64/llvm/lib/Target/R600'
>/mnt/sdb1/Src64/llvm/Makefile.rules:932: recipe for target 'R600/.makeall' failed
>make[2]: *** [R600/.makeall] Error 2
>make[2]: Leaving directory '/mnt/sdb1/Src64/llvm/lib/Target'
>/mnt/sdb1/Src64/llvm/Makefile.rules:932: recipe for target 'Target/.makeall' failed
>make[1]: *** [Target/.makeall] Error 2
>make[1]: Leaving directory '/mnt/sdb1/Src64/llvm/lib'
>/mnt/sdb1/Src64/llvm/Makefile.rules:883: recipe for target 'all' failed
>make: *** [all] Error 1
>
Comment 9 Andy Furniss 2014-11-18 23:21:41 UTC
oops, failed there trying to obsolete - didn't mean to do comment 8
Comment 10 Andy Furniss 2014-11-18 23:36:48 UTC
Built llvm with GCC now and Tentative fix works for me.
Comment 11 Matt Arsenault 2014-11-20 00:15:05 UTC
I've posted an improved patch here: http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20141117/245415.html

This should swap the operands and still work with unordered compares
Comment 12 Andy Furniss 2014-11-20 11:25:39 UTC
(In reply to Matt Arsenault from comment #11)
> I've posted an improved patch here:
> http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20141117/245415.
> html
> 
> This should swap the operands and still work with unordered compares

Doesn't work for me with the 2 patches from there on llvm tree from yesterday.
Comment 13 Marek Olšák 2014-11-21 15:49:27 UTC
Mesa commit 645b471d619b654d3bacfa8598f759833e08db4e should fix this.
Comment 14 Andy Furniss 2014-11-21 17:48:57 UTC
(In reply to Marek Olšák from comment #13)
> Mesa commit 645b471d619b654d3bacfa8598f759833e08db4e should fix this.

Yes, it works with or without patches on current mesa head.
Comment 15 Michel Dänzer 2014-11-22 02:54:25 UTC
Module: Mesa
Branch: master
Commit: 645b471d619b654d3bacfa8598f759833e08db4e
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=645b471d619b654d3bacfa8598f759833e08db4e

Author: Marek Olšák <marek.olsak@amd.com>
Date:   Thu Nov 20 22:16:09 2014 +0100

radeonsi: use minnum and maxnum LLVM intrinsics for MIN and MAX opcodes
Comment 16 Michel Dänzer 2014-11-25 07:23:38 UTC
*** Bug 86490 has been marked as a duplicate of this bug. ***


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.