別名割り当て表明をコンパイル単位に適用するようコンパイラーに命令する。 特に指定されない限り、コンパイラーは別名割り当て表明を利用して、可能な箇所で最適化の改善を行います。
.-:---------------. | .-noaddrtaken-. | | +-noallptrs---+ | | +-typeptr-----+ | V +-ansi--------+ | >>- -q--alias--=----+-noansi------+-+-------------------------->< +-notypeptr---+ +-allptrs-----+ '-addrtaken---'
別名割り当ての使用可能オプションは、以下の通りです。
[no]typeptr | notypeptr が指定されている場合、異なる型へのポインターには別名は割り当てられません。 つまり、コンパイル単位内で異なる型の 2 つのポインターが同じストレージ・ロケーションを指すことはありません。 |
[no]allptrs | noallptrs が指定されている場合、ポインターに別名が割り当てられることはありません (また、-qalias=typeptr を暗黙指定します)。 したがって、コンパイル単位内で、2 つのポインターが同じストレージ・ロケーションを指すことはありません。 |
[no]addrtaken | noaddrtaken が指定されている場合、変数はアドレスが取得されない限り、 ポインターから切り離されています。 アドレスがコンパイル単位に記録されていない 変数のクラスは、ポインターを介した間接アクセスから切り離されていると見なされます。 |
[no]ansi | ansi が指定された場合、最適化で型ベースの別名割り当てが使用されます。
これは、データ・オブジェクトへのアクセスに安全に使用することができる左辺値に制限を加えます。
最適化プログラムは、ポインターが指すことができるのは、同じ型のオブジェクトだけ であると想定します。
これ (ansi) が xlc、xlc++、xlC、 c89 および c99 呼び出しコマンドのデフォルトです。
このオプションは、-O オプションも指定しない限り無効です。
noansi を選択すると、最適化プログラムはワーストケースの別名割り当てを想定します。 これは、型に関係なく、特定の型のポインターが外部オブジェクト、またはアドレスがすでに取得されているオブジェクトを指すことができると想定します。 これが cc 呼び出しコマンドのデフォルトです。 |
以下は、型ベースの別名割り当ての対象となりません。
myprogram.c をコンパイルするときにワーストケースの別名割り当ての想定を指定するには、以下のように入力します。
xlc myprogram.c -O -qalias=noansi
関連情報