Intel® C++ Compiler
Community support and assistance for creating C++ code that runs on platforms based on Intel® processors.
7944 Discussions

MSVC 2013, how could I interpret source code and line number from assmebler output: outer %s was not auto-vectorized: consider u

Marián__VooDooMan__M
New Contributor II
804 Views

Greetings,

using up-to date ICC 15 since ICC 16 is buggy and produces wrong code at least if it compiles the correct code...

how could I interpret source c++ file and line number from assembler output like:

$LN30110:
                                ; LOE rax rdx rcx rbx rsi r8 r9 r10 f1 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15
.B183.54::                      ; Preds .B183.213 .B183.53
L2185::         ; optimization report
                ; outer %s was not auto-vectorized: consider using SIMD directive

so I can write "#pragma simd noassert" ?

Thank you.

0 Kudos
1 Solution
Yuan_C_Intel
Employee
804 Views

Hi, VooDooMan

The "outer %s was not auto-vectorized: consider using SIMD directive" tells it's possible to vectorize  the outer loop if the inner loop cannot be auto-vectorized.

Since SIMD directive supports outer loop vetorization, while it is not normally supported by auto-vectorization.

Yes, I agree with you the %s can be more meaningful here to avoid any confusion. I will check with engineer for this.

To vectorize outer loop, you need to put the SIMD directive right before the outer for loop, for example: 

#pragma simd
	  for (int i=0; i<N; i++)
	  {     
		  for (int j=0; j<10; j++)
		   data += j;
	  }

 

Thanks.

View solution in original post

0 Kudos
4 Replies
Marián__VooDooMan__M
New Contributor II
804 Views

NB: I use IPO

0 Kudos
Marián__VooDooMan__M
New Contributor II
804 Views

...and isn't a "%s" a formatting syntax? shouldn't it be replaced by something more meaningful?

0 Kudos
Marián__VooDooMan__M
New Contributor II
804 Views
and why I get this message from IPO: remark #15541: outer loop was not auto-vectorized: consider using SIMD directive when I get then with "#pragma simd noassert": error : break cannot be used to exit simd region ?! on the same line...
0 Kudos
Yuan_C_Intel
Employee
805 Views

Hi, VooDooMan

The "outer %s was not auto-vectorized: consider using SIMD directive" tells it's possible to vectorize  the outer loop if the inner loop cannot be auto-vectorized.

Since SIMD directive supports outer loop vetorization, while it is not normally supported by auto-vectorization.

Yes, I agree with you the %s can be more meaningful here to avoid any confusion. I will check with engineer for this.

To vectorize outer loop, you need to put the SIMD directive right before the outer for loop, for example: 

#pragma simd
	  for (int i=0; i<N; i++)
	  {     
		  for (int j=0; j<10; j++)
		   data += j;
	  }

 

Thanks.

0 Kudos
Reply