On 06/09/2020 22:16, Luc Van Oostenryck wrote: > Add a few more testcases to catch possible future regressions. > > Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx> > --- > validation/optim/and-shl-or-and0.c | 15 +++++++++++++++ > validation/optim/lsr-or-and0.c | 22 ++++++++++++++++++++++ > validation/optim/shl-or-constant0.c | 12 ++++++++++++ > validation/optim/shl-or-constant1.c | 12 ++++++++++++ > validation/optim/shl-or-constant2.c | 12 ++++++++++++ > 5 files changed, 73 insertions(+) > create mode 100644 validation/optim/and-shl-or-and0.c > create mode 100644 validation/optim/lsr-or-and0.c > create mode 100644 validation/optim/shl-or-constant0.c > create mode 100644 validation/optim/shl-or-constant1.c > create mode 100644 validation/optim/shl-or-constant2.c > > diff --git a/validation/optim/and-shl-or-and0.c b/validation/optim/and-shl-or-and0.c > new file mode 100644 > index 000000000000..298dcb434fc7 > --- /dev/null > +++ b/validation/optim/and-shl-or-and0.c > @@ -0,0 +1,15 @@ > +// => (b << 12) & 0xfff00000 > +unsigned and_shl_or_and0(unsigned a, unsigned b) > +{ > + return (((a & 0xfff00000) | b) << 12) & 0xfff00000; > +} > + > +/* > + * check-name: and-shl-or-and0 > + * check-command: test-linearize -Wno-decl $file > + * > + * check-output-ignore > + * check-output-excludes: or\\. > + * check-output-excludes: lsr\\. Hmm, this still doesn't sit right - have you discovered the reason for this? > + * check-output-excludes: %arg1\\. > + */ > diff --git a/validation/optim/lsr-or-and0.c b/validation/optim/lsr-or-and0.c > new file mode 100644 > index 000000000000..fe3a2649eea2 > --- /dev/null > +++ b/validation/optim/lsr-or-and0.c > @@ -0,0 +1,22 @@ > +#define S 12 > + > +// ((x & M) | b) >> S; > +// -> ((x >> S) & (M >> S)) | (b >> S) > +// but (M >> S) == 0 > +// => (b >> S) yep, better. ATB, Ramsay Jones > + > +int lsr_or_and0a(unsigned int x, unsigned int b) > +{ > + return ((x & 0x00000fff) | b) >> S; > +} > + > +/* > + * check-name: lsr-or-and0 > + * check-command: test-linearize -Wno-decl $file > + * > + * check-output-ignore > + * check-output-pattern(1): lsr\\. > + * check-output-excludes: %arg1\\. > + * check-output-excludes: and\\. > + * check-output-excludes: or\\. > + */ > diff --git a/validation/optim/shl-or-constant0.c b/validation/optim/shl-or-constant0.c > new file mode 100644 > index 000000000000..25347b4b3b20 > --- /dev/null > +++ b/validation/optim/shl-or-constant0.c > @@ -0,0 +1,12 @@ > +unsigned shl_or_constant0(unsigned a) > +{ > + return (a | 0xfff00000) << 12; > +} > + > +/* > + * check-name: shl-or-constant0 > + * check-command: test-linearize -Wno-decl $file > + * > + * check-output-ignore > + * check-output-excludes: or\\. > + */ > diff --git a/validation/optim/shl-or-constant1.c b/validation/optim/shl-or-constant1.c > new file mode 100644 > index 000000000000..cd3ea8bb011b > --- /dev/null > +++ b/validation/optim/shl-or-constant1.c > @@ -0,0 +1,12 @@ > +unsigned shl_or_constant1(unsigned a) > +{ > + return (a | 0x000fffff) << 12; > +} > + > +/* > + * check-name: shl-or-constant1 > + * check-command: test-linearize -Wno-decl $file > + * > + * check-output-ignore > + * check-output-contains: ret\\..*\\$0xfffff000 > + */ > diff --git a/validation/optim/shl-or-constant2.c b/validation/optim/shl-or-constant2.c > new file mode 100644 > index 000000000000..d4618eb1bab8 > --- /dev/null > +++ b/validation/optim/shl-or-constant2.c > @@ -0,0 +1,12 @@ > +unsigned shl_or_constant2(unsigned a) > +{ > + return (a | 0x00ffff0f) << 12; > +} > + > +/* > + * check-name: shl-or-constant2 > + * check-command: test-linearize -Wno-decl $file > + * > + * check-output-ignore > + * check-output-contains: or\\..*\\$0xfff0f > + */ >