#pragma unroll_completely

このプラグマによって、ループを完全に展開することをコンパイラに指示します。ループの繰り返し回数をコンパイラが判別できる場合にのみ有です。

Note

ベクトル化されたループもベクトル化されていないループも、どちらも #pragma unroll_completely を使用して展開できます。すなわち、#pragma unroll_completely--no_vectorize--vectorize の両方に適用されます。

Show/hide使用法

このプラグマは、-O3 -Otime でコンパイルする場合にのみ適用されます。-O3 -Otime を使用してコンパイルする場合、ループの展開が有効な場所では自動的にループが展開されます。このプラグマを使用すると、自動的には完全に展開されないループを完全に展開することをコンパイラに要求できます。

Note

この #pragma プラグマは、コンパイラによって最適なループの展開が行われていないという確証が --diag_warning=optimizations などから得られる場合にのみ使用します。

このプラグマによって何らかの効果が得られたかどうかは、実際に --diag_warning=optimizations でコンパイルするか、生成されたアセンブリコードを検証したときに初めて判別できます。その両方が必要になる場合もあります。

Show/hide制約条件

このプラグマは -O3 -Otime でコンパイルした場合にのみ効果があります。また、このプラグマは、自動的には展開されなかったループを展開するための、あくまでもコンパイラへの要求です。必ずしもループが展開されるとは限りません。

#pragma unroll_completely は、for ループ、while ループ、または do ... while ループの直前でのみ使用できます。

#pragma unroll_completely を外側のループで使用すると、ベクトル化を防止できます。逆に、内側のループで #pragma unroll_completely を使用するのが有効な場合もあります。

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0491EJ
Non-ConfidentialID081711