-
Notifications
You must be signed in to change notification settings - Fork 13.2k
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
Comments
assigned to @MatzeB |
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() |
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. |
Fixed in r256799 (and I added a lit test case based on this bug in r256801). |
*** Bug llvm/llvm-bugzilla-archive#26025 has been marked as a duplicate of this bug. *** |
*** Bug llvm/llvm-bugzilla-archive#26009 has been marked as a duplicate of this bug. *** |
mentioned in issue llvm/llvm-bugzilla-archive#26009 |
mentioned in issue llvm/llvm-bugzilla-archive#26025 |
1 similar comment
mentioned in issue llvm/llvm-bugzilla-archive#26025 |
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;
}
The text was updated successfully, but these errors were encountered: