Large integers

Hi devs,

I'd like to ask for some advise about optimization passes.
Which pass might be responsible for this LLVM IR and why?

%0 = load i288* bitcast ([9 x i32]* @array to i288*), align 16
%1 = lshr i288 %0, 224

array is just a global constant array of 9 integers
and the code only accesses individual elements.
The LLVM version is 3.1.

Thanks,
Mario

The Scalar Replacement of Aggregates pass (-scalarrepl) generates these big integers. We recently added a constructor parameter to limit the size of the wide integer loads.

Hi,

The Scalar Replacement of Aggregates pass (-scalarrepl) generates these big integers. We recently added a constructor parameter to limit the size of the wide integer loads.

Is it the Threshold parameter or are you referring to LLVM trunk?

Besides that I
(a) made sure both scalar replacement passes aren't added to the pass manager, and
(b) put a debug message into SROA::runOnFunction(), SROA::performScalarRepl(),
    and SROA::performPromotion() (in ScalarReplAggregates.cpp) to check
    whether one of them is being called. Definitely not.

But I still get the same result. So is there maybe any other pass that directly
creates such code and/or indirectly causes some scalar replacement code to be invoked.

Thanks and ciao,
Mario