Marcello Maggioni
2011-Oct-27 00:15 UTC
[LLVMdev] How to make Polly ignore some non-affine memory accesses
Perfect, thank you very much :) 2011/10/26 Tobias Grosser <tobias at grosser.es>:> On 10/24/2011 11:32 PM, Marcello Maggioni wrote: >> >> Strange , with --enable-shared (I use auto tool by the way ...) it gives: >> >> MacBook-Pro-di-Marcello:examples Kariddi$ ./compile_ex.sh >> not_so_simple_loop >> clang (LLVM option parsing): Unknown command line argument >> '-enable-polly-viewer'. Try: 'clang (LLVM option parsing) -help' >> clang (LLVM option parsing): Did you mean '-enable-polly-vector'? >> >> Seems like it doesn't compile the viewer option ... > > This error message is because the option name was changed. Try -polly-show. > > Furthermore, I plan to commit the change to clang, that solves the failure > when loading clang. Though it will probably take a day until it gets through > review. > > Cheers > Tobi >
Marcello Maggioni
2011-Nov-01 04:01 UTC
[LLVMdev] How to make Polly ignore some non-affine memory accesses
Mmm, this code seems to kill polly:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *B;
int i,j,k,h;
const int x = 0, y=0;
B = (char *)malloc(sizeof(char)*1024*1024);
for (i = 1; i < 1024; i++)
for (j = 1; j < 1024; j++)
{
if (i+j > 1000)
B[j] = i;
}
printf("Random Value: %d", B[rand() % 1024*1024]);
return 0;
}
running:
opt -load ${PATH_TO_POLLY_LIB}/LLVMPolly.dylib -polly-scops -analyze
code.preopt.ll
I get:
Printing analysis 'Polly - Create polyhedral description of Scops' for
region: 'for.body3 => for.inc.single_exit' in function
'main':
Invalid Scop!
0 libLLVM-3.1svn.dylib 0x0000000103fab905 _ZL15PrintStackTracePv + 53
1 libLLVM-3.1svn.dylib 0x0000000103fabf79 _ZL13SignalHandleri + 361
2 libsystem_c.dylib 0x00007fff94c8acfa _sigtramp + 26
3 libLLVM-3.1svn.dylib 0x0000000103526810
llvm::SmallVectorTemplateCommon<llvm::SCEV
const*>::operator[](unsigned int) + 128
4 LLVMPolly.dylib 0x0000000106867af8
SCEVAffinator::getLoopDepth(llvm::Loop const*) + 72
5 LLVMPolly.dylib 0x00000001068676c7
SCEVAffinator::visitAddRecExpr(llvm::SCEVAddRecExpr const*) + 247
6 LLVMPolly.dylib 0x000000010686710b
llvm::SCEVVisitor<SCEVAffinator, isl_pw_aff*>::visit(llvm::SCEV
const*) + 283
7 LLVMPolly.dylib 0x0000000106866f71
SCEVAffinator::visit(llvm::SCEV const*) + 449
8 LLVMPolly.dylib 0x000000010686766c
SCEVAffinator::visitAddRecExpr(llvm::SCEVAddRecExpr const*) + 156
9 LLVMPolly.dylib 0x000000010686710b
llvm::SCEVVisitor<SCEVAffinator, isl_pw_aff*>::visit(llvm::SCEV
const*) + 283
10 LLVMPolly.dylib 0x0000000106866f71
SCEVAffinator::visit(llvm::SCEV const*) + 449
11 LLVMPolly.dylib 0x000000010685fd49
SCEVAffinator::getPwAff(polly::ScopStmt const*, llvm::SCEV const*,
llvm::Value const*) + 57
12 LLVMPolly.dylib 0x000000010685d076
polly::ScopStmt::buildConditionSet(polly::Comparison const&) const +
54
13 LLVMPolly.dylib 0x000000010685d414
polly::ScopStmt::addConditionsToDomain(isl_set*, polly::TempScop&,
llvm::Region const&) const + 196
14 LLVMPolly.dylib 0x000000010685d519
polly::ScopStmt::buildDomain(polly::TempScop&, llvm::Region const&)
const + 169
15 LLVMPolly.dylib 0x000000010685d90d
polly::ScopStmt::ScopStmt(polly::Scop&, polly::TempScop&, llvm::Region
const&, llvm::BasicBlock&,
llvm::SmallVectorImpl<llvm::Loop*>&,
llvm::SmallVectorImpl<unsigned int>&) + 861
16 LLVMPolly.dylib 0x000000010685d59d
polly::ScopStmt::ScopStmt(polly::Scop&, polly::TempScop&, llvm::Region
const&, llvm::BasicBlock&,
llvm::SmallVectorImpl<llvm::Loop*>&,
llvm::SmallVectorImpl<unsigned int>&) + 77
17 LLVMPolly.dylib 0x000000010685ef60
polly::Scop::buildScop(polly::TempScop&, llvm::Region const&,
llvm::SmallVectorImpl<llvm::Loop*>&, llvm::SmallVectorImpl<unsigned
int>&, llvm::LoopInfo&) + 624
18 LLVMPolly.dylib 0x000000010685eeab
polly::Scop::buildScop(polly::TempScop&, llvm::Region const&,
llvm::SmallVectorImpl<llvm::Loop*>&, llvm::SmallVectorImpl<unsigned
int>&, llvm::LoopInfo&) + 443
19 LLVMPolly.dylib 0x000000010685ebee
polly::Scop::Scop(polly::TempScop&, llvm::LoopInfo&,
llvm::ScalarEvolution&, isl_ctx*) + 462
20 LLVMPolly.dylib 0x000000010685ea15
polly::Scop::Scop(polly::TempScop&, llvm::LoopInfo&,
llvm::ScalarEvolution&, isl_ctx*) + 53
21 LLVMPolly.dylib 0x000000010685f8f3
polly::ScopInfo::runOnRegion(llvm::Region*, llvm::RGPassManager&) +
227
22 libLLVM-3.1svn.dylib 0x00000001034f4dc1
llvm::RGPassManager::runOnFunction(llvm::Function&) + 1185
23 libLLVM-3.1svn.dylib 0x0000000103a0f261
llvm::FPPassManager::runOnFunction(llvm::Function&) + 497
24 libLLVM-3.1svn.dylib 0x0000000103a0f5cd
llvm::FPPassManager::runOnModule(llvm::Module&) + 125
25 libLLVM-3.1svn.dylib 0x0000000103a0f855
llvm::MPPassManager::runOnModule(llvm::Module&) + 549
26 libLLVM-3.1svn.dylib 0x0000000103a0ffac
llvm::PassManagerImpl::run(llvm::Module&) + 172
27 libLLVM-3.1svn.dylib 0x0000000103a10491
llvm::PassManager::run(llvm::Module&) + 33
28 opt 0x00000001032dbb76 main + 6966
29 opt 0x00000001032ca5a4 start + 52
Stack dump:
0. Program arguments: opt -load
/Users/Kariddi/Documents/Sviluppo/Tesi/git-prefix/lib//LLVMPolly.dylib
-polly-scops -analyze strange_pointer.preopt.ll
1. Running pass 'Function Pass Manager' on module
'strange_pointer.preopt.ll'.
2. Running pass 'Region Pass Manager' on function '@main'
3. Running pass 'Polly - Create polyhedral description of Scops' on
basic block '%for.body3.single_entry'
./compile_ex.sh: line 9: 36824 Segmentation fault: 11 opt -load
${PATH_TO_POLLY_LIB}/LLVMPolly.dylib -polly-scops -analyze
$1.preopt.ll
Also I want to ask:
Why Bitcast instructions make polly discard scops?
Thanks
Marcello
2011/10/27 Marcello Maggioni <hayarms at
gmail.com>:> Perfect, thank you very much :)
>
> 2011/10/26 Tobias Grosser <tobias at grosser.es>:
>> On 10/24/2011 11:32 PM, Marcello Maggioni wrote:
>>>
>>> Strange , with --enable-shared (I use auto tool by the way ...) it
gives:
>>>
>>> MacBook-Pro-di-Marcello:examples Kariddi$ ./compile_ex.sh
>>> not_so_simple_loop
>>> clang (LLVM option parsing): Unknown command line argument
>>> '-enable-polly-viewer'. Try: 'clang (LLVM option
parsing) -help'
>>> clang (LLVM option parsing): Did you mean
'-enable-polly-vector'?
>>>
>>> Seems like it doesn't compile the viewer option ...
>>
>> This error message is because the option name was changed. Try
-polly-show.
>>
>> Furthermore, I plan to commit the change to clang, that solves the
failure
>> when loading clang. Though it will probably take a day until it gets
through
>> review.
>>
>> Cheers
>> Tobi
>>
>
Marcello Maggioni
2011-Nov-02 11:17 UTC
[LLVMdev] How to make Polly ignore some non-affine memory accesses
Mmm I found out a very strange behavior (to me) of the SCEV analysis
of the loop bound of the external loop I posted.
When in ScopDetection it gets the SCEV of the external loop bound in
the "isValidLoop()" function with:
const SCEV *LoopCount = SE->getBackedgeTakenCount(L);
It returns a SCEVCouldNotCompute, but if I change the "if" block
inside the loop from:
if (i+j > 1000)
to:
if (i > 1000)
that SCEV results valid.
Later in the ScopInfo pass it crashes analyzing the SCEV of the
comparison expression (in buildConditionSets ) . It's like if it
recognizes that "i" is a recurring expression that depends on the
execution of a loop, but can't derive that loop, and segfaults in
getLoopDepth ...
Seems like a bug of the SCEV engine to me., but I'm not sure :(
2011/11/1 Marcello Maggioni <hayarms at
gmail.com>:> Mmm, this code seems to kill polly:
>
> #include <stdio.h>
> #include <stdlib.h>
>
> int main()
> {
> char *B;
> int i,j,k,h;
> const int x = 0, y=0;
> B = (char *)malloc(sizeof(char)*1024*1024);
>
> for (i = 1; i < 1024; i++)
> for (j = 1; j < 1024; j++)
> {
> if (i+j > 1000)
> B[j] = i;
> }
> printf("Random Value: %d", B[rand() % 1024*1024]);
>
> return 0;
> }
>
> running:
>
> opt -load ${PATH_TO_POLLY_LIB}/LLVMPolly.dylib -polly-scops -analyze
> code.preopt.ll
>
> I get:
>
> Printing analysis 'Polly - Create polyhedral description of Scops'
for
> region: 'for.body3 => for.inc.single_exit' in function
'main':
> Invalid Scop!
> 0 libLLVM-3.1svn.dylib 0x0000000103fab905 _ZL15PrintStackTracePv + 53
> 1 libLLVM-3.1svn.dylib 0x0000000103fabf79 _ZL13SignalHandleri + 361
> 2 libsystem_c.dylib 0x00007fff94c8acfa _sigtramp + 26
> 3 libLLVM-3.1svn.dylib 0x0000000103526810
> llvm::SmallVectorTemplateCommon<llvm::SCEV
> const*>::operator[](unsigned int) + 128
> 4 LLVMPolly.dylib 0x0000000106867af8
> SCEVAffinator::getLoopDepth(llvm::Loop const*) + 72
> 5 LLVMPolly.dylib 0x00000001068676c7
> SCEVAffinator::visitAddRecExpr(llvm::SCEVAddRecExpr const*) + 247
> 6 LLVMPolly.dylib 0x000000010686710b
> llvm::SCEVVisitor<SCEVAffinator, isl_pw_aff*>::visit(llvm::SCEV
> const*) + 283
> 7 LLVMPolly.dylib 0x0000000106866f71
> SCEVAffinator::visit(llvm::SCEV const*) + 449
> 8 LLVMPolly.dylib 0x000000010686766c
> SCEVAffinator::visitAddRecExpr(llvm::SCEVAddRecExpr const*) + 156
> 9 LLVMPolly.dylib 0x000000010686710b
> llvm::SCEVVisitor<SCEVAffinator, isl_pw_aff*>::visit(llvm::SCEV
> const*) + 283
> 10 LLVMPolly.dylib 0x0000000106866f71
> SCEVAffinator::visit(llvm::SCEV const*) + 449
> 11 LLVMPolly.dylib 0x000000010685fd49
> SCEVAffinator::getPwAff(polly::ScopStmt const*, llvm::SCEV const*,
> llvm::Value const*) + 57
> 12 LLVMPolly.dylib 0x000000010685d076
> polly::ScopStmt::buildConditionSet(polly::Comparison const&) const +
> 54
> 13 LLVMPolly.dylib 0x000000010685d414
> polly::ScopStmt::addConditionsToDomain(isl_set*, polly::TempScop&,
> llvm::Region const&) const + 196
> 14 LLVMPolly.dylib 0x000000010685d519
> polly::ScopStmt::buildDomain(polly::TempScop&, llvm::Region const&)
> const + 169
> 15 LLVMPolly.dylib 0x000000010685d90d
> polly::ScopStmt::ScopStmt(polly::Scop&, polly::TempScop&,
llvm::Region
> const&, llvm::BasicBlock&,
llvm::SmallVectorImpl<llvm::Loop*>&,
> llvm::SmallVectorImpl<unsigned int>&) + 861
> 16 LLVMPolly.dylib 0x000000010685d59d
> polly::ScopStmt::ScopStmt(polly::Scop&, polly::TempScop&,
llvm::Region
> const&, llvm::BasicBlock&,
llvm::SmallVectorImpl<llvm::Loop*>&,
> llvm::SmallVectorImpl<unsigned int>&) + 77
> 17 LLVMPolly.dylib 0x000000010685ef60
> polly::Scop::buildScop(polly::TempScop&, llvm::Region const&,
> llvm::SmallVectorImpl<llvm::Loop*>&,
llvm::SmallVectorImpl<unsigned
> int>&, llvm::LoopInfo&) + 624
> 18 LLVMPolly.dylib 0x000000010685eeab
> polly::Scop::buildScop(polly::TempScop&, llvm::Region const&,
> llvm::SmallVectorImpl<llvm::Loop*>&,
llvm::SmallVectorImpl<unsigned
> int>&, llvm::LoopInfo&) + 443
> 19 LLVMPolly.dylib 0x000000010685ebee
> polly::Scop::Scop(polly::TempScop&, llvm::LoopInfo&,
> llvm::ScalarEvolution&, isl_ctx*) + 462
> 20 LLVMPolly.dylib 0x000000010685ea15
> polly::Scop::Scop(polly::TempScop&, llvm::LoopInfo&,
> llvm::ScalarEvolution&, isl_ctx*) + 53
> 21 LLVMPolly.dylib 0x000000010685f8f3
> polly::ScopInfo::runOnRegion(llvm::Region*, llvm::RGPassManager&) +
> 227
> 22 libLLVM-3.1svn.dylib 0x00000001034f4dc1
> llvm::RGPassManager::runOnFunction(llvm::Function&) + 1185
> 23 libLLVM-3.1svn.dylib 0x0000000103a0f261
> llvm::FPPassManager::runOnFunction(llvm::Function&) + 497
> 24 libLLVM-3.1svn.dylib 0x0000000103a0f5cd
> llvm::FPPassManager::runOnModule(llvm::Module&) + 125
> 25 libLLVM-3.1svn.dylib 0x0000000103a0f855
> llvm::MPPassManager::runOnModule(llvm::Module&) + 549
> 26 libLLVM-3.1svn.dylib 0x0000000103a0ffac
> llvm::PassManagerImpl::run(llvm::Module&) + 172
> 27 libLLVM-3.1svn.dylib 0x0000000103a10491
> llvm::PassManager::run(llvm::Module&) + 33
> 28 opt 0x00000001032dbb76 main + 6966
> 29 opt 0x00000001032ca5a4 start + 52
> Stack dump:
> 0. Program arguments: opt -load
> /Users/Kariddi/Documents/Sviluppo/Tesi/git-prefix/lib//LLVMPolly.dylib
> -polly-scops -analyze strange_pointer.preopt.ll
> 1. Running pass 'Function Pass Manager' on module
'strange_pointer.preopt.ll'.
> 2. Running pass 'Region Pass Manager' on function
'@main'
> 3. Running pass 'Polly - Create polyhedral description of
Scops' on
> basic block '%for.body3.single_entry'
> ./compile_ex.sh: line 9: 36824 Segmentation fault: 11 opt -load
> ${PATH_TO_POLLY_LIB}/LLVMPolly.dylib -polly-scops -analyze
> $1.preopt.ll
>
> Also I want to ask:
>
> Why Bitcast instructions make polly discard scops?
>
> Thanks
> Marcello
>
> 2011/10/27 Marcello Maggioni <hayarms at gmail.com>:
>> Perfect, thank you very much :)
>>
>> 2011/10/26 Tobias Grosser <tobias at grosser.es>:
>>> On 10/24/2011 11:32 PM, Marcello Maggioni wrote:
>>>>
>>>> Strange , with --enable-shared (I use auto tool by the way ...)
it gives:
>>>>
>>>> MacBook-Pro-di-Marcello:examples Kariddi$ ./compile_ex.sh
>>>> not_so_simple_loop
>>>> clang (LLVM option parsing): Unknown command line argument
>>>> '-enable-polly-viewer'. Try: 'clang (LLVM option
parsing) -help'
>>>> clang (LLVM option parsing): Did you mean
'-enable-polly-vector'?
>>>>
>>>> Seems like it doesn't compile the viewer option ...
>>>
>>> This error message is because the option name was changed. Try
-polly-show.
>>>
>>> Furthermore, I plan to commit the change to clang, that solves the
failure
>>> when loading clang. Though it will probably take a day until it
gets through
>>> review.
>>>
>>> Cheers
>>> Tobi
>>>
>>
>
Reasonably Related Threads
- [LLVMdev] How to make Polly ignore some non-affine memory accesses
- [LLVMdev] How to make Polly ignore some non-affine memory accesses
- [LLVMdev] How to make Polly ignore some non-affine memory accesses
- [LLVMdev] How to make Polly ignore some non-affine memory accesses
- [LLVMdev] How to make Polly ignore some non-affine memory accesses