-
Notifications
You must be signed in to change notification settings - Fork 60
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[BUG] Function multiversioning FEAT conditions are incorrect #320
Labels
bug
Something isn't working
Comments
I'd like to run the same function on both SVE core and SVE2 core using FMV. But FMV doesn't work as expected because of this odd definition. So I posted this issue to LLVM. Could you fix it ? |
It seems to me this is not specific to SVE, more features may be affected. We should be checking >= rather than equality. |
labrinea
added a commit
to labrinea/acle
that referenced
this issue
Jun 4, 2024
Some features are later versions of others, like sve2 and sve, therefore performing equality checks on system register values would incur incorrect feature detection on later hardware. See ARM-software#320 for example. Therefore we should instead do >= comparisons when HWCAP info is not available. I am also fixing incorrect detection for LSE and WFxT.
8 tasks
labrinea
added a commit
to labrinea/acle
that referenced
this issue
Jun 13, 2024
Some features are later versions of others, like sve2 and sve, therefore performing equality checks on system register values would incur incorrect feature detection on later hardware. See ARM-software#320 for example. Therefore we should instead do >= comparisons when HWCAP info is not available. I am also fixing incorrect detection for LSE and WFxT. Lastly to detect SVE2 and SME2 I am using the SVEVer and SMEVer bitfields respectively.
labrinea
added a commit
to labrinea/acle
that referenced
this issue
Jun 21, 2024
Some features are later versions of others, like sve2 and sve, therefore performing equality checks on system register values would incur incorrect feature detection on later hardware. See ARM-software#320 for example. Therefore we should instead do >= comparisons when HWCAP info is not available. I am also fixing incorrect detection for LSE and WFxT. Lastly to detect SVE2 and SME2 I am using the SVEVer and SMEVer bitfields respectively.
labrinea
added a commit
to labrinea/acle
that referenced
this issue
Jun 25, 2024
Some features are later versions of others, like sve2 and sve, therefore performing equality checks on system register values would incur incorrect feature detection on later hardware. See ARM-software#320 for example. Therefore we should instead do >= comparisons when HWCAP info is not available. I am also fixing incorrect detection for LSE and WFxT. Lastly to detect SVE2 and SME2 I am using the SVEVer and SMEVer bitfields respectively.
labrinea
added a commit
to labrinea/acle
that referenced
this issue
Jun 25, 2024
Some features are later versions of others, like sve2 and sve, therefore performing equality checks on system register values would incur incorrect feature detection on later hardware. See ARM-software#320 for example. Therefore we should instead do >= comparisons when HWCAP info is not available. I am also fixing incorrect detection for LSE and WFxT. Lastly to detect SVE2 and SME2 I am using the SVEVer and SMEVer bitfields respectively.
vhscampos
pushed a commit
that referenced
this issue
Jun 25, 2024
Some features are later versions of others, like sve2 and sve, therefore performing equality checks on system register values would incur incorrect feature detection on later hardware. See #320 for example. Therefore we should instead do >= comparisons when HWCAP info is not available. I am also fixing incorrect detection for LSE and WFxT. Lastly to detect SVE2 and SME2 I am using the SVEVer and SMEVer bitfields respectively.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
In acle.md the table describing multiversioning has many entries like this:
310 FEAT_SVE sve ID_AA64PFR0_EL1.SVE != 0b0000 AND ID_AA64ZFR0_EL1.SVEver == 0b0000
In almost all cases using equality comparison is incorrect. The above means a multiversioned function for SVE would never be selected on a core with SVE2. So these version checks need to use
>=
, never==
.Also, why not list the HWCAP instead as that is what actual implementations will use?
The text was updated successfully, but these errors were encountered: