Displaying 20 results from an estimated 500 matches similar to: "[LLVMdev] InstructionCombining forgets alignment of globals"
2008 Jul 10
0
[LLVMdev] InstructionCombining forgets alignment of globals
I think I found it. In InstCombiner::ComputeMaskedBits we have the following
lines:
if (GlobalValue *GV = dyn_cast<GlobalValue>(V)) {
unsigned Align = GV->getAlignment();
if (Align == 0 && TD && GV->getType()->getElementType()->isSized())
Align = TD->getPrefTypeAlignment(GV->getType()->getElementType());
It assumes that global
2008 Jul 14
5
[LLVMdev] Spilled variables using unaligned moves
Hi all,
It looks like vector spills don't use aligned moves even though the stack is
aligned. This seems like an optimization opportunity.
The attached replacement of fibonacci.cpp generates x86 code like this:
03A70010 push ebp
03A70011 mov ebp,esp
03A70013 and esp,0FFFFFFF0h
03A70019 sub esp,1A0h
...
03A7006C movups xmmword ptr
2008 Jul 14
0
[LLVMdev] Spilled variables using unaligned moves
This is on Windows / Cygwin? I think the dynamic stack pointer re-
alignment doesn't happen until post- register allocation.
Assuming there aren't other instructions between the prologue and the
first movups that mess up esp (there shouldn't), this is indeed a bug.
Please file a bug and attach a bc file. Thanks.
Evan
On Jul 14, 2008, at 7:43 AM, Nicolas Capens wrote:
> Hi
2008 Jul 14
0
[LLVMdev] Spilled variables using unaligned moves
On Jul 14, 2008, at 7:43 AM, Nicolas Capens wrote:
> Hi all,
>
> It looks like vector spills don’t use aligned moves even though the
> stack is aligned. This seems like an optimization opportunity.
What target is this? Linux doesn't have a 16-byte aligned stack.
-Chris
>
> The attached replacement of fibonacci.cpp generates x86 code like
> this:
>
> 03A70010
2008 Jul 15
1
[LLVMdev] Spilled variables using unaligned moves
Hi Evan,
Could you maybe point me to the source files where this issue might
originate? I'd like to learn more about LLVM's innards but so far I've just
scraped the surface and I don't know where what phase of instruction
selection / register allocation / stack layout / etc. happens.
If I understand correctly this issue might be fixed by moving stack pointer
alignment
2008 Jul 12
2
[LLVMdev] Shuffle regression
Hi all,
I think I found a regression in the shuffle instruction. I've attached a
replacement of fibonacci.cpp to reproduce the issue. It runs fine on release
2.3 but revision 52648 fails, and I suspect that the issue is still present.
2.3 generates the following x86 code:
03A10010 push ebp
03A10011 mov ebp,esp
03A10013 and esp,0FFFFFFF0h
03A10019
2007 Oct 18
3
[LLVMdev] movaps being generated despite alignment 1 being specified
Hello LLVMers,
High order bit:
Presence of a called function is causing a store on an unrelated vector
to generate an aligned store rather an unaligned one despite unaligned
store being indicated in the associated StoreInst.
Details:
I pulled down the latest source, so this is something I'm finding with
the current LLVM. I'm hoping you'll have an idea what's
2008 Jul 12
0
[LLVMdev] Shuffle regression
I have fixed a related bug: 52740. Can you check if that fixes this
problem?
Evan
On Jul 11, 2008, at 6:43 PM, Nicolas Capens wrote:
> Hi all,
>
> I think I found a regression in the shuffle instruction. I’ve
> attached a replacement of fibonacci.cpp to reproduce the issue. It
> runs fine on release 2.3 but revision 52648 fails, and I suspect
> that the issue is still
2008 May 22
4
[LLVMdev] SSE intrinsic alignment bug?
Hi all,
I think I might have found a potential bug when using SSE intrinsic and
unaligned memory. Here's the code to reproduce it:
#include "llvm/Module.h"
#include "llvm/Intrinsics.h"
#include "llvm/Instructions.h"
#include "llvm/ModuleProvider.h"
#include "llvm/ExecutionEngine/JIT.h"
#include
2007 Oct 19
0
[LLVMdev] movaps being generated despite alignment 1 being specified
On Oct 18, 2007, at 1:52 PM, Chuck Rose III wrote:
>
> Here are the instructions for evaluateDependents. The JITter
> hasn’t compiled foo yet. What’s confusing to me is why did my
> movups suddenly become a movaps? All the stores and loads have
> align 1 on them.
Hi Chuck,
I believe this is a bug but am unable to reproduce it with the test
case you've provided. I
2008 May 22
0
[LLVMdev] SSE intrinsic alignment bug?
Small typo, for the correct assembly code I meant:
mov eax,dword ptr [esp+8]
movups xmm0,xmmword ptr [eax]
rcpps xmm1,xmm0
mov eax,dword ptr [esp+4]
movups xmmword ptr [eax],xmm1
ret
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
2008 May 22
2
[LLVMdev] SSE intrinsic alignment bug?
The intent here is that "in" and "out" are always aligned, by forcing
the stack pointer in the function that defines them to be aligned. On
some targets (darwin) the stack pointer is always 16-byte aligned; on
other targets there should be code in the function prologue to force
it to be aligned.
On May 22, 2008, at 4:36 PM, Nicolas Capens wrote:
> Small typo, for
2004 Aug 06
2
Notes on 1.1.4 Windows. Testing of SSE Intrinics Code and others
Here are our notes on 1.1.4 testing on Windows
1. Compile Error with regular mode (FIXED_POINT undefined) at lsp.c line 104
static inline spx_word16_t spx_cos(spx_word16_t x) . VS6 does not like
the inline keyword here. Removing it allows compiling.
same with cb_search_sse.h line 34.
2. Compile Error with quant_lsp.c line 55. M_PI is undefined. Either it
needs to be included
2012 Mar 31
1
[LLVMdev] llvm.exp.f32 didn't work
Hi,
I found that llvm.exp.f32 didn't work but sqrt works well.
I implemented a function like
define inlinehint float "my_exp"(float %.value) {
.body:
%0 = call float @llvm.exp.f32(float %.value)
ret float %0
}
declare float @llvm.exp.f32(float) nounwind readonly
But it generates following ASM:
00280072 movups xmm0,xmmword ptr [esp+8]
00280077 movss dword ptr
2009 Jun 30
2
[LLVMdev] JIT on Windows x64
Hi,
I'm new to LLVM and have some questions about using the JIT on Windows
x64. I am aware that this is currently broken but am attempting to use
the hack/patch proposed in this bug
http://llvm.org/bugs/show_bug.cgi?id=3739.
I checked out the revision the patch was created for (66183) and applied
it but the assembler generated seems to fail whenever it reaches a
movaps insctruction.
2020 Aug 30
5
BUG: complete misunterstanding of the MS-ABI
Objects compiled for the MS-ABI don't conform to it!
Data types beyond 64 bit MUST BE returned by the callee via the
hidden first argument allocated by the caller, NOT in XMM0!
Demo/proof: from this source
--- llvm-bug.c ---
#ifndef __clang__
typedef struct {
unsigned __int64 low;
unsigned __int64 high;
} __uint128_t;
#else
__attribute__((ms_abi))
#endif
__uint128_t
2013 Jul 19
0
[LLVMdev] llvm.x86.sse2.sqrt.pd not using sqrtpd, calling a function that modifies ECX
(Changing subject line as diagnosis has changed)
I'm attaching the compiled code that I've been getting, both with
CodeGenOpt::Default and CodeGenOpt::None . The crash isn't occurring
with CodeGenOpt::None, but that seems to be because ECX isn't being used
- it still gets set to 0x7fffffff by one of the calls to 76719BA1
I notice that X86::SQRTPD[m|r] appear in
2013 Jul 19
4
[LLVMdev] SIMD instructions and memory alignment on X86
Hmm, I'm not able to get those .ll files to compile if I disable SSE and I
end up with SSE instructions(including sqrtpd) if I don't disable it.
On Thu, Jul 18, 2013 at 10:53 PM, Peter Newman <peter at uformia.com> wrote:
> Is there something specifically required to enable SSE? If it's not
> detected as available (based from the target triple?) then I don't think
2017 Sep 30
2
invalid code generated on Windows x86_64 using skylake-specific features
I have this code, which works fine on MacOS and Linux hosts:
const char *target_specific_cpu_args;
const char *target_specific_features;
if (g->is_native_target) {
target_specific_cpu_args = ZigLLVMGetHostCPUName();
target_specific_features = ZigLLVMGetNativeFeatures();
} else {
target_specific_cpu_args = "";
target_specific_features =
2008 Jul 10
2
[LLVMdev] InstructionCombining forgets alignment of globals
Hi Nicolas,
> if (GlobalValue *GV = dyn_cast<GlobalValue>(V)) {
>
> unsigned Align = GV->getAlignment();
>
> if (Align == 0 && TD && GV->getType()->getElementType()->isSized())
>
> Align = TD->getPrefTypeAlignment(GV->getType()->getElementType());
>
> It assumes that global values are always optimally