This is an archive of the discontinued LLVM Phabricator instance.

Fix for false dependency identification (pr31143) - reading undef values shouldn't be considers as a use
AbandonedPublic

Authored by myatsina on Dec 4 2016, 1:38 AM.

Details

Summary

This commit fixes pr31143 (https://llvm.org/bugs/show_bug.cgi?id=31143).

ExecutionDepsFix pass couldn't identify the partial register update of ROUNDSSr:
%XMM1<def,tied1> = ROUNDSSr %XMM1<undef,tied0>, %XMM0, 9

The root cause of this was because ROUNDSSr instruction is marked as reading %XMM1, but it's actually reading an undef value.
This patch fixes MachineInstruction - now a use of an undef value isn't considered a real use anymore.

Diff Detail

Repository
rL LLVM

Event Timeline

myatsina updated this revision to Diff 79923.Dec 4 2016, 1:38 AM
myatsina retitled this revision from to Fix for false dependency identification (pr31143) - reading undef values shouldn't be considers as a use.
myatsina updated this object.
myatsina added reviewers: mkuper, DavidKreitzer.
myatsina set the repository for this revision to rL LLVM.

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.

Having said that, if there's consensus to take this instead of D27323, I won't stand in the way.

mkuper resigned from this revision.Dec 29 2016, 6:17 PM
mkuper removed a reviewer: mkuper.
zvi removed a reviewer: zvi.Jan 18 2017, 1:09 PM
myatsina abandoned this revision.Jan 19 2017, 6:08 AM