Displaying 20 results from an estimated 5000 matches similar to: "TryToShrinkGlobalToBoolean in GlobalOpt.cpp issue"
2016 Aug 30
2
TryToShrinkGlobalToBoolean in GlobalOpt.cpp issue
Yes, the full test case is:
static int x = 100;
int y = whatever;
int main() {
x = -101;
y = whatever that's not whatever above;
printf("%d\n", y);
printf("%d\n", x);
return 0;
}
You are correct, in the above test case the globalopt does not make the
transformation.... however, I think the original issue still stands, it
really shouldn't be doing it
2015 Sep 18
2
GlobalOPT and sections
Hello everyone,
This is a rather ancient code with Chris's name all over it, so I naturally feel humbled :)
I see a conceptual issue in lib/Transforms/IPO/GlobalOpt.cpp with several optimizations that create a copy of GlobalVariable without copying attributes from the original one.
Consider this one:
http://llvm.org/doxygen/GlobalOpt_8cpp_source.html
static bool
2015 Sep 21
2
GlobalOPT and sections
Chris,
Thanks for the clarification... at least no bug report is due... and I am glad that I've asked.
In my case these transformations are rather useful and forcing them to copy original global variable section is making them compatible with our (rather important) use case, so I guess I will have to fix it locally.
Nevertheless if someone else would have a similar issue - I would be
2016 Mar 21
3
Question about GlobalOpt
Hi,
GlobalOpt may not consider demoting globals to locals in the "main" function
when C is used. It used to consider "main" specifically prior to commit
r253168 , for both C and C++. Since r253168, the check for the norecurse
attribute may prevent "main" from being considered. This happens because
the Function Attributes pass will not add the norecurse
2016 Mar 22
1
Question about GlobalOpt
Hi Mehdi,
You are right – modifying the Function Attributes pass to mark “main” as norecurse would break the C standard (unless it has a similar statement regarding “main” that the C++ standard has – I cannot find it), so that’s a no-go. Looks like there was an attempt to bypass library calls in the Function Attributes pass for the purpose of detecting norecurse functions:
2013 Jul 08
1
[LLVMdev] Special cased global-to-local-in-main replacement in GlobalOpt
Hello,
GlobalOpt has an interesting special-case optimization for globals that are
only accessed within "main". These globals are replaced by allocas within
the "main" function (and the GV itself is deleted). The full condition for
this happening is:
// If this is a first class global and has only one accessing function
// and this function is main (which we know is not
2016 Mar 22
3
Question about GlobalOpt
I think the conceptual issues have largely been sorted out, it is mostly
that it is *much* harder to deduce norecurse than it might seem like
superficially.
On Mon, Mar 21, 2016 at 4:02 PM Mehdi Amini <mehdi.amini at apple.com> wrote:
> On Mar 21, 2016, at 3:57 PM, Sanjin Sijaric via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
>
> Hi,
>
> GlobalOpt may not
2008 Sep 04
3
[LLVMdev] A simple case about SDiv
Hi,
I have a simple C case as following:
int test(int x, int y) {
return -x / -y;
}
With llvm-gcc -O1, I got:
define i32 @test(i32 %x, i32 %y) nounwind {
entry:
sub i32 0, %x ; <i32>:0 [#uses=1]
sub i32 0, %y ; <i32>:1 [#uses=1]
sdiv i32 %0, %1 ; <i32>:2 [#uses=1]
ret i32 %2
}
With llvm-gcc -O2, I got:
define i32 @test(i32 %x, i32 %y) nounwind {
entry:
sdiv i32
2014 Apr 30
4
[LLVMdev] Best way to clean up empty global_ctors
Hi,
I'd like to fix PR19590, which is about llvm.global_ctors containing
functions that end up being empty after optimization (which causes the
linker to add useless init_array entries to the output binary).
globalopt removes empty functions from llvm.global_ctors, but by the
time the function becomes empty globalopt has already run and it
doesn't run again.
I'm wondering what the
2016 Mar 22
2
Question about GlobalOpt
Hi,
On my phone right now but I'll fish out the pertinent threads when I get to
the office. Keyword searches for 'norecurse' on llvm-dev will probably get
most of them.
Indeed, this correctness improvement caused a performance regression on
some programs. There is a way to revert to the old, broken behaviour:
'-mllvm -force-attribute=main:norecurse'. Given how many people run
2013 Apr 29
3
[LLVMdev] Many tests fail on Win64
Hi,
I check-out the latest version of LLVM and see many failures (on Win64):
********************
67> FAIL: LLVM :: Transforms/GlobalOpt/zeroinitializer-gep-load.ll (5518 of 7763)
67> ******************** TEST 'LLVM :: Transforms/GlobalOpt/zeroinitializer-gep-load.ll' FAILED ********************
67> Script:
67> --
67> W:/LLVM_org/build64/bin/Debug/opt.EXE <
2015 Nov 05
4
[PATCH] D14227: Add a new attribute: norecurse
[Adding llvm-dev and re-stating the situation for llvm-dev's benefit]
*RFC: A new attribute, "norecurse".*
In some cases, it is possible to demote global variables to local
variables. This is possible when the global is only used in one function,
and that function is known not to recurse (because if the function
recurses, a local variable cannot be equivalent to a global as the
2016 Mar 15
2
how to type-legalize a dag
On Tue, Mar 15, 2016 at 2:21 PM, Krzysztof Parzyszek via llvm-dev <
llvm-dev at lists.llvm.org> wrote:
> On 3/15/2016 4:16 PM, Rail Shafigulin via llvm-dev wrote:
>
>> Below is the output of llc with a -debug-only=isel. As you could see the
>> output type for load, store, and add changes from v4i32 to i32 during
>> legalization. How can I preserve the output type to
2014 May 01
3
[LLVMdev] Best way to clean up empty global_ctors
I talked about this with Nick in person months ago, and my understanding is
that GlobalOpt is also an enabling optimization that needs to run early.
For example, if we can eliminate an initializer to an internal global with
no other stores to it, we can propagate the result.
Maybe we should run it twice.
On Thu, May 1, 2014 at 11:01 AM, Rafael Espíndola <
rafael.espindola at gmail.com>
2012 Mar 23
2
[LLVMdev] Fixing VAARG on PPC64
The PowerPC backend on PPC64 for non-Darwin (SVR4 ABI) systems
currently has a problem handling integer types smaller than 64 bits.
This is because the ABI specifies that these types are zero-extended to
64 bits on the stack and the default logic provided in LegalizeDAG does
not use that convention. Specifically, for these targets we have:
setOperationAction(ISD::VAARG, MVT::Other, Expand);
2016 May 10
2
Some questions about phase ordering in OPT and LLC
> >> You can look at AddOptimizationPasses() in opt.cpp.
> >
> > As far as I understand, the two passmanager do not interleave their
> > passes. It first runs all the function passes and below. Then all the
> > module passes. So if you specify:
> >
> > opt -mymodulepass0 -myfunctionpass -mymodulepass1
> >
> > What you actually get is:
2013 Apr 29
0
[LLVMdev] Many tests fail on Win64
In a debug build you should get a stack trace by default, which would
be helpful here.
I can try to repro later today, but I'm not surprised there are issues
because most people I know stick with 32-bit builds even on 64-bit
Windows.
On Mon, Apr 29, 2013 at 4:27 AM, Demikhovsky, Elena
<elena.demikhovsky at intel.com> wrote:
> Hi,
>
>
>
> I check-out the latest version of
2014 Dec 05
3
[LLVMdev] default operation action
Hi Guys,
I noticed that the operation actions( promote/expand/custom) are set per operation basis.
Wondering if we can set it up globally?
For example, I have native supported 32 bits registers, to handle 8 bits value operations, I want to do promote.
and to support 64 bit operations, I want to expand.
If I can set up the operation actions for the same type globally, then I can avoid to
2008 May 14
2
[LLVMdev] malloc, magic, and embedded compilation
On Wed, 2008-05-14 at 10:20 -0700, Chris Lattner wrote:
> On Wed, 14 May 2008, Jonathan S. Shapiro wrote:
> > On Wed, 2008-05-14 at 16:15 +0200, Duncan Sands wrote:
> >> I don't think the logic is based on "main", but on whether functions
> >> are marked "internal" or not. That said, GlobalOpt.cpp seems to reason
> >> based on the name
2012 Jul 27
4
[LLVMdev] Vector promotion broken for <2 x [i8|i16]>
Vector promotion which is new in LLVM 3.1 is broken for sub32 bit types. The problem is in the VectorLegalizer::PromoteVectorOp.
The function getTypeToPromoteTo will return a <2 x i32> for a <2 x i8>, <2 x i16> or <4 x i8>. The problem is that there are no vectors of size 1 defined for i32 or i16. The attached patch fixes these issues.
This can be reproduced by setting in