Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Marián__VooDooMan__M
New Contributor II
122 Views

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

Jump to solution

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
122 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

4 Replies
Marián__VooDooMan__M
New Contributor II
122 Views

NB: I use IPO

Marián__VooDooMan__M
New Contributor II
122 Views

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

Marián__VooDooMan__M
New Contributor II
122 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...
Yuan_C_Intel
Employee
123 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

Reply