diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 2016-07-08 15:44:46 +0200 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 2016-07-08 15:44:46 +0200 |
commit | 4c7650c3eaf4dfbe5971864bf084e76f844051ee (patch) | |
tree | 32b5deb84cb3fd36f4baada8eed4ce108aed9599 /test/regression/Results | |
parent | e73d5db97cdb22cce2ee479469f62af3c4b6264a (diff) | |
download | compcert-kvx-4c7650c3eaf4dfbe5971864bf084e76f844051ee.tar.gz compcert-kvx-4c7650c3eaf4dfbe5971864bf084e76f844051ee.zip |
Unwanted partial constant propagation in 64-bit integer arguments to builtins
Here are two examples that cause an internal error in Asmexpand.ml:
volatile long long x; void f(unsigned int i) { x = i; }
unsigned g(unsigned i) { return __builtin_clzll(i); }
The argument "i" to builtin volatile store or __builtin_clzll is turned into a BA_splitlong(BA_int 0, BA <variable i>), which Asmexpand.ml doesn't know how to handle.
The fix (in AST.builtin_arg_ok) is to prevent this 'optimization' for all builtins except those of the "OK_all" kind, i.e. __builtin_annot.
Regression tests were added and tested on IA32. Need to retest on ARM and PowerPC.
Diffstat (limited to 'test/regression/Results')
-rw-r--r-- | test/regression/Results/builtins-arm | 1 | ||||
-rw-r--r-- | test/regression/Results/builtins-ia32 | 2 | ||||
-rw-r--r-- | test/regression/Results/builtins-powerpc | 1 |
3 files changed, 4 insertions, 0 deletions
diff --git a/test/regression/Results/builtins-arm b/test/regression/Results/builtins-arm index 40cb6048..f637fb16 100644 --- a/test/regression/Results/builtins-arm +++ b/test/regression/Results/builtins-arm @@ -3,6 +3,7 @@ bswap16(1234) = 3412 clz(12345678) = 3 clzll(12345678) = 35 clzll(1234567812345678) = 3 +clzll(78563412) = 33 fsqrt(3.141590) = 1.772453 read_16_rev = 3412 read_32_rev = efbeadde diff --git a/test/regression/Results/builtins-ia32 b/test/regression/Results/builtins-ia32 index a7669f14..6ab71f0d 100644 --- a/test/regression/Results/builtins-ia32 +++ b/test/regression/Results/builtins-ia32 @@ -3,9 +3,11 @@ bswap16(1234) = 3412 clz(12345678) = 3 clzll(12345678) = 35 clzll(1234567812345678) = 3 +clzll(78563412) = 33 ctz(1234) = 2 ctzll(1234567812345678) = 3 ctzll(1234567800000000) = 35 +ctzll(78563412) = 1 fsqrt(3.141590) = 1.772453 fmin(3.141590, 2.718000) = 2.718000 fmax(3.141590, 2.718000) = 3.141590 diff --git a/test/regression/Results/builtins-powerpc b/test/regression/Results/builtins-powerpc index bb4edf3a..a3c63ad6 100644 --- a/test/regression/Results/builtins-powerpc +++ b/test/regression/Results/builtins-powerpc @@ -3,6 +3,7 @@ mulhwu(12345678, deadbeef) = fd5bdee clz(12345678) = 3 clzll(12345678) = 35 clzll(1234567812345678) = 3 +clzll(78563412) = 33 bswap(12345678) = 78563412 bswap16(1234) = 3412 fmadd(3.141590, 2.718000, 1.414000) = 9.952842 |