[Bug rtl-optimization/78090] New: [x86_64]: GCC allows integer register for inter unit conversion under -mtune-ctrl=^inter_unit_conversions .
venkataramanan.kumar at amd dot com
gcc-bugzilla@gcc.gnu.org
Mon Oct 24 08:07:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78090
Bug ID: 78090
Summary: [x86_64]: GCC allows integer register for inter unit
conversion under -mtune-ctrl=^inter_unit_conversions .
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: venkataramanan.kumar at amd dot com
Target Milestone: ---
GCC is not honoring -mtune-ctrl=^inter_unit_conversions and allows integer
register
-O2 -mtune-ctrl=^inter_unit_conversions
or
-O2 -march=bdver4
gcc version 7.0.0 20161020 (experimental) (GCC)
--- test case--
void test(float);
int main(int a, int b) {
if(a == 1)
{
return 1;
}
if (b==1)
{
return 1;
}
test((float)a);
return 0;
}
-----
Assembly
(snip)
main:
.LFB0:
.cfi_startproc
cmpl $1, %esi
je .L3
cmpl $1, %edi
je .L3
pxor %xmm0, %xmm0
subq $8, %rsp
.cfi_def_cfa_offset 16
cvtsi2ss %edi, %xmm0 <== %edi should go via stack.
call test
xorl %eax, %eax
popq %rdx
.cfi_def_cfa_offset 8
ret
.L3:
movl $1, %eax
ret
(snip)
The optimization is honored when modifying return value in branches
void test(float);
int main(int a, int b) {
if(a == 1)
{
return -1;
}
if (b==1)
{
return -1;
}
test((float)a);
return 0;
}
---snip--
main:
.LFB0:
.cfi_startproc
cmpl $1, %esi
je .L3
cmpl $1, %edi
je .L3
pxor %xmm0, %xmm0
subq $24, %rsp
.cfi_def_cfa_offset 32
movl %edi, 12(%rsp)
cvtsi2ss 12(%rsp), %xmm0
call test
xorl %eax, %eax
addq $24, %rsp
.cfi_def_cfa_offset 8
ret
.L3:
orl $-1, %eax
ret
---snip--
More information about the Gcc-bugs
mailing list