[llvm-bugs] [Bug 35359] New: [GlobalISel][AArch64] Calling convention for HFAs incorrect on big-endian targets
via llvm-bugs
llvm-bugs at lists.llvm.org
Mon Nov 20 03:00:04 PST 2017
https://bugs.llvm.org/show_bug.cgi?id=35359
Bug ID: 35359
Summary: [GlobalISel][AArch64] Calling convention for HFAs
incorrect on big-endian targets
Product: libraries
Version: trunk
Hardware: PC
OS: Linux
Status: NEW
Severity: enhancement
Priority: P
Component: GlobalISel
Assignee: unassignedbugs at nondot.org
Reporter: oliver.stannard at arm.com
CC: llvm-bugs at lists.llvm.org
Global-isel generates incorrect code when targeting big-endian AArch64 for this
code:
struct foo {
float first;
float second;
};
float get_first(foo p) {
return p.first;
}
This is the code that global-isel currently generates:
// /work/llvm/build/bin/clang --target=aarch64--none-eabi -march=armv8-a -c
callees.cpp -O0 -mllvm -global-isel=true -mllvm -global-isel-abort=0
-mbig-endian -o - -S
_Z9get_first3foo: // @_Z9get_first3foo
// BB#0: // %entry
sub sp, sp, #16 // =16
// implicit-def: %X8
fmov w9, s0
mov w10, w9
bfxil x8, x10, #0, #32
fmov w9, s1
mov w10, w9
bfi x8, x10, #32, #32
add x10, sp, #8 // =8
str x8, [sp, #8]
ldr w9, [x10]
fmov s0, w9
add sp, sp, #16 // =16
ret
When run on a big-endian target, this incorrectly returns the second member of
the struct, instead of the first.
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20171120/a329de92/attachment.html>
More information about the llvm-bugs
mailing list