[Bug c/84240] Error in extract_constrain_insn, at recog.c:2246
xvl5190 at psu dot edu
gcc-bugzilla@gcc.gnu.org
Wed Feb 7 15:34:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84240
--- Comment #2 from xvl5190 at psu dot edu ---
Please try this example with optimization level -O1/-O2/-O3:
/* Executable testcase for 'output flags.' */
/* { dg-do rund *nbum; } */
char TestC() {
char r;
__asm__("stc": "=@ccc" (r));
if (r) {
__asm__("clc": "=@ccnc" (r));
if (r) return 1;
}
return 0;
}
char TestE() {
char r; /* 1 equals 1. */
__asm__("cmp $1, %1": "=@cce" (r): "r" (1));
if (r) { /* 1 not equals 2. */
__asm__("cmp $2, %1": "=@ccne" (r): "r" (1));
if (r) return 1;
}
return 0;
}
char TestZ() {
char r; /* 1 equals 1. */
__asm__("cmp $1, %1": "=@ccz" (r): "r" (1));
if (r) { /* 1 not equals 2. */
__asm__("cmp $2, %1": "=@ccnz" (r): "r" (1));
if (r) return 1;
}
return 0;
}
char TestA() {
char r; /* 1 a 0. */
__asm__("cmp $0, %1": "=@cca" (r): "r" (1));
if (r) { /* 1 na 2. */
__asm__("cmp $2, %1": "=@ccna" (r): "r" (1));
if (r) { /* 1 na 1. */
__asm__("cmp $1, %1": "=@ccna" (r): "r" (1));
if (r) return 1;
}
}
return 0;
}
char TestAE() {
char r; /* 1 ae 0. */
__asm__("cmp $0, %1": "=@ccae" (r): "r" (1));
if (r) { /* 1 nae 2. */
__asm__("cmp $2, %1": "=@ccnae" (r): "r" (1));
if (r) { /* 1 ae 1. */
__asm__("cmp $1, %1": "=@ccae" (r): "r" (1));
if (r) return 1;
}
}
return 0;
}
char TestB() {
char r; /* 1 b 2. */
__asm__("cmp $2, %1": "=@ccb" (r): "r" (1));
if (r) { /* 1 nb 0. */
__asm__("cmp $0, %1": "=@ccnb" (r): "r" (1));
if (r) { /* 1 nb 1. */
__asm__("cmp $1, %1": "=@ccnb" (r): "r" (1));
if (r) return 1;
}
}
return 0;
}
char TestBE() {
char r; /* 1 be 2. */
__asm__("cmp $2, %1": "=@ccbe" (r): "r" (1));
if (r) { /* 1 nbe 0. */
__asm__("cmp $0, %1": "=@ccnbe" (r): "r" (1));
if (r) { /* 1 be 1. */
__asm__("cmp $1, %1": "=@ccbe" (r): "r" (1));
if (r) return 1;
}
}
return 0;
}
char TestG() {
char r; /* 1 g 0. */
__asm__("cmp $0, %1": "=@ccg" (r): "r" (1));
if (r) { /* 1 ng 2. */
__asm__("cmp $2, %1": "=@ccng" (r): "r" (1));
if (r) { /* 1 ng 1. */
__asm__("cmp $1, %1": "=@ccng" (r): "r" (1));
if (r) return 1;
}
}
return 0;
}
char TestGE() {
char r; /* 1 ge 0. */
__asm__("cmp $0, %1": "=@ccge" (r): "r" (1));
if (r) { /* 1 nge 2. */
__asm__("cmp $2, %1": "=@ccnge" (r): "r" (1));
if (r) { /* 1 ge 1. */
__asm__("cmp $1, %1": "=@ccge" (r): "r" (1));
if (r) return 1;
}
}
return 0;
}
char TestL() {
char r; /* 1 l 2. */
__asm__("cmp $2, %1": "=@ccl" (r): "r" (1));
if (r) { /* 1 nl 0. */
__asm__("cmp $0, %1": "=@ccnl" (r): "r" (1));
if (r) { /* 1 nl 1. */
__asm__("cmp $1, %1": "=@ccnl" (r): "r" (1));
if (r) return 1;
}
}
return 0;
}
char TestLE() {
char r; /* 1 le 2. */
__asm__("cmp $2, %1": "=@ccle" (r): "r" (1));
if (r) { /* 1 nle 0. */
__asm__("cmp $0, %1": "=@ccnle" (r): "r" (1));
if (r) { /* 1 le 1. */
__asm__("cmp $1, %1": "=@ccle" (r): "r" (1));
if (r) return 1;
}
}
return 0;
}
char TestO() {
char r;
unsigned char res = 128; /* overflow. */
__asm__("addb $128, %1": "=@cco" (r), "+r" (res));
if (r) { /* not overflow. */
__asm__("addb $1, %1": "=@ccno" (r), "+r" (res));
if (r) return 1;
}
return 0;
}
char TestP() {
char r, res = 1;
/* even
# bits. */
__asm__("addb $2, %1": "=@ccp" (r), "+r" (res));
if (r) {
/* odd
# bits. */
__asm__("addb $1, %1": "=@ccnp" (r), "+r" (res));
if (r) return 1;
}
return 0;
}
char TestS() {
char r, res = 1; /* sign bit set. */
__asm__("addb $128, %1": "=@ccs" (r), "+r" (res));
if (r) { /* sign bit not set. */
__asm__("subb $128, %1": "=@ccns" (r), "+r" (res));
if (r) return 1;
}
return 0;
} /* dg-do treats exit code of 0 as success. */
int main() {
if (TestC() && TestE() && TestZ() && TestA() && TestAE() && TestB() &&
TestBE() && TestG() && TestGE() && TestL() && TestLE() && TestO() && TestP() &&
TestS()) return 0;
__builtin_abort();
}
More information about the Gcc-bugs
mailing list