<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
Hi Hal, <br class="">
<br class="">
One more related question. If alignment is not specified for globals or allocas isSafeToLoadUnconditionally assumes that default alignment is what DataLayout::getPrefTypeAlignment returns. I can’t find any confirmation for this in docs. For globals I see:<br class="">
“ If not present, or if the alignment is set to zero, the alignment of the global is set by the target to whatever it feels convenient.”<br class="">
For allocas:<br class="">
"If not specified, or if zero, the target can choose to align the allocation on any convenient boundary compatible with the type.”<br class="">
<br class="">
Am I missing something? Is it correct assumption?
<div class=""><br class="">
Thanks,<br class="">
Artur<br class="">
<br class="">
<blockquote type="cite" class="">On 25 Apr 2015, at 05:16, Hal Finkel <<a href="mailto:hfinkel@anl.gov" class="">hfinkel@anl.gov</a>> wrote:<br class="">
<br class="">
----- Original Message -----<br class="">
<blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">
From: "Artur Pilipenko" <<a href="mailto:apilipenko@azulsystems.com" class="">apilipenko@azulsystems.com</a>><br class="">
To: <a href="mailto:llvmdev@cs.uiuc.edu" class="">llvmdev@cs.uiuc.edu</a><br class="">
Sent: Friday, April 24, 2015 11:51:08 AM<br class="">
Subject: [LLVMdev] Speculative loads and alignment<br class="">
<br class="">
Hi,<br class="">
<br class="">
There are several optimizations where we try to load speculatively.<br class="">
There are also two similar functions to determine whether it's a<br class="">
safe transformation:<br class="">
* isSafeToLoadUnconditionally<br class="">
* isSafeToSpeculativelyExecute<br class="">
<br class="">
isSafeToLoadUnconditionally tries to take load alignment into account<br class="">
but fails to do this in some cases. It checks alignment for pointers<br class="">
derived from allocas and global variables. But in other cases it<br class="">
scans the local BB to see if the pointer is already being loaded or<br class="">
stored from/to. In the latter case there can be a load/store with an<br class="">
alignment smaller than requested.<br class="">
<br class="">
In most cases this function is used in conjunction with<br class="">
isDereferenceablePointer: isDereferenceablePointer ||<br class="">
isSafeToLoadUnconditionally. So if a pointer is dereferenceable<br class="">
there will be no alignment check.<br class="">
<br class="">
isSafeToSpeculativelyExecute doesn't care about alignment at all. It<br class="">
only checks for pointer dereferenceability. However according to the<br class="">
description it must check for undefined behavior which misaligned<br class="">
load (pointer alignment < instruction specified alignment) is.<br class="">
<br class="">
Is it safe to load speculatively if we can't prove that the load is<br class="">
well-aligned (pointer alignment >= instruction specified alignment)?<br class="">
</blockquote>
<br class="">
No, it is not safe (at least not without pessimizing the alignment); as you point out, the alignment can have control dependencies. Sounds like we should fix this (part of this fix should also be to update Clang to emit align attributes where it emits dereferenceable
 to preserve current optimizations).<br class="">
<br class="">
-Hal<br class="">
<br class="">
<blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">
<br class="">
Thanks,<br class="">
Artur<br class="">
_______________________________________________<br class="">
LLVM Developers mailing list<br class="">
<a href="mailto:LLVMdev@cs.uiuc.edu" class="">LLVMdev@cs.uiuc.edu</a>         http://llvm.cs.uiuc.edu<br class="">
http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev<br class="">
<br class="">
</blockquote>
<br class="">
-- <br class="">
Hal Finkel<br class="">
Assistant Computational Scientist<br class="">
Leadership Computing Facility<br class="">
Argonne National Laboratory<br class="">
</blockquote>
<br class="">
</div>
</body>
</html>