If you don't have commit privs; I will commit it for you. (but it will be Thursday when I do so)
Implemented comments submitted until 12/04.
As Michael have already noticed, I also have a solution for this false dependency bug (https://reviews.llvm.org/D27391).
What happens is that some instructions (like the ROUNDSSr) read an undef value from one of it's source operands.
Part of the logic that searches for false dependencies decides if the dependency can be broken only if the instruction doesn't read the operand.
I think that a read of an undef value should not be considered as a real read, and this is the fix in my patch. I believe this approach will catch more cases.
Updated per comments, let me know if I should do anything else.
@tstellarAMD If you're still doing the point releases a fix for the problem fixed by this patch should be back ported to LLVM 3.9.x if possible because it also has this bug.
Thanks for the comments!
- Broadcast 32/64/128 bits also when having only AVX feature.
- Broadcast 64 bit also in 32-bit systems.
What we do for the other instructions is simply not have the additional source register (and use the _Int variants for when we need it, which is currently only for intrinsics).
I've posted a fix in that vein as D27323. We can revisit that decision, but that (and a refactoring of the TD files) ought to happen for all instructions, I wouldn't want to leave ROUND as a special case.
Please, integrate test cases from D27384 into this patch and make sure that tests still pass.
Turns out we already have another patch that fixes the same problem: D26907
Ah, sorry I didn't notice that review, let's keep to your version of the patch then.
This change seems to modify normal C behavior again. Is there any strong motivation for doing this and if yes could it be done generically with C?
Fixes for Michael's comments.
can you rename qc-deprecated-asm.s to something like derecated-warning.s