Question on target-features


In “target-features” list in LLVM-IR, there are “+feature”, “-feature”. My question is, does “-feature” is equivalent to not specifying a feature at all?
For example:
attributes #0 = { “target-cpu”=“znver2” “target-features”="+avx -avx2" }
Wheather it is equalent to omitting the avx2 from list?
attributes #0 = { “target-cpu”=“znver2” “target-features”="+avx" }

No. The way +feature works is that it causes the assignment Attribute=Value to happen, where Attribute and Value are strings defined in a td file. With -feature, this assignment does not happen, so whatever the default value is of Attribute, it will remain unchanged.

Ugh, that would be a “yes” then…

Since the target cpu is znver2, which has avx2, target-features of “+avx -avx2” is not equivalent to “+avx”. So the two attributes in the original question are not equivalent.

This thread is getting from bad to worse… Certain features are assumed as default for a given processor, so -feature will actually have an effect of removing it from the feature string that is parsed in the subtarget. Back to “no”…

And -feature will remove all other features that depend on the feature. So for x86, -sse2 will disable sse2, sse3, sse4.1, sse4.2, avx, avx2, etc.

Thanks for the clarification. :slight_smile: