Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

wrong code on x86_64-linux-gnu at -O1 and above in 32-bit mode #26325

Closed
chengniansun opened this issue Dec 27, 2015 · 9 comments
Closed

wrong code on x86_64-linux-gnu at -O1 and above in 32-bit mode #26325

chengniansun opened this issue Dec 27, 2015 · 9 comments
Assignees
Labels
bugzilla Issues migrated from bugzilla

Comments

@chengniansun
Copy link

Bugzilla Link 25951
Resolution FIXED
Resolved on Jan 07, 2016 12:57
Version trunk
OS Linux
CC @chengniansun,@hfinkel,@MatzeB,@zhendongsu

Extended Description

The following code is miscompiled by clang-trunk at -O1 and above in 32-bit mode (not 64-bit mode) on x86_64-linux-gnu.

$: clang-trunk -v
clang version 3.8.0 (trunk 256450)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/bin
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/4.9
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/4.9.3
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/5.2.1
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.4
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.4.7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.6
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.6.4
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.7.3
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8.4
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9.3
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5.2.1
Found candidate GCC installation: /usr/local/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.6.3
Found candidate GCC installation: /usr/local/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.7.4
Found candidate GCC installation: /usr/local/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.8.2
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.9
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Candidate multilib: x32;@MX32
Selected multilib: .;@m64
$:
$: clang-trunk small.c -m32 -O3 ; ./a.out
127
$: clang-trunk small.c -m32 -O2 ; ./a.out
127
$: clang-trunk small.c -m32 -Os ; ./a.out
127
$: clang-trunk small.c -m32 -O1 ; ./a.out
1
$: clang-trunk small.c -m32 -O0 ; ./a.out
1
$: clang-trunk small.c -m64 -O3 ; ./a.out
1
$: cat small.c
int printf(const char*, ...);
char a, b, d;
int c;
int main() {
int e = b++;
c++;
d = a++ == e;
if (c)
printf("%d\n", (int)b);
return 0;
}

@chengniansun
Copy link
Author

assigned to @MatzeB

@llvmbot
Copy link
Collaborator

llvmbot commented Dec 28, 2015

This looks related to r255362.

When trying to generate a SAHF sequence, computeRegisterLiveness()/analyzePhysReg() believe AX is dead because AH is killed - while AL is in fact alive and contains b.

I think in analyzePhysReg()
bool Covered = TRI->isSuperRegisterEq(MOReg, Reg);
should be:
bool Covered = TRI->isSuperRegisterEq(Reg, MOReg);
but that causes other tests to fail.

@MatzeB
Copy link
Contributor

MatzeB commented Jan 5, 2016

Thanks for the analysis Michael, I think this is indeed the problem and I got confused by the fact that isSuperRegister(A, B) means B is a super register of A (the reverse would be a lot more intuitive IMO).

Fixing this lets two of the test cases run into the FIXME in X86InstrInfo::copyPhysReg(). I'll commit a change soon and disable -verify-machineinstrs for those two tests for now.

@MatzeB
Copy link
Contributor

MatzeB commented Jan 5, 2016

Fixed in r256799 (and I added a lit test case based on this bug in r256801).

@zhendongsu
Copy link

*** Bug llvm/llvm-bugzilla-archive#26025 has been marked as a duplicate of this bug. ***

@rotateright
Copy link
Contributor

*** Bug llvm/llvm-bugzilla-archive#26009 has been marked as a duplicate of this bug. ***

@rotateright
Copy link
Contributor

mentioned in issue llvm/llvm-bugzilla-archive#26009

@MatzeB
Copy link
Contributor

MatzeB commented Nov 26, 2021

mentioned in issue llvm/llvm-bugzilla-archive#26025

1 similar comment
@zhendongsu
Copy link

mentioned in issue llvm/llvm-bugzilla-archive#26025

@llvmbot llvmbot transferred this issue from llvm/llvm-bugzilla-archive Dec 10, 2021
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bugzilla Issues migrated from bugzilla
Projects
None yet
Development

No branches or pull requests

5 participants