public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/103098] New: bogus error: the last argument must be an 8-bit immediate
@ 2021-11-05 11:13 f.heckenbach@fh-soft.de
2021-11-05 11:19 ` [Bug target/103098] " pinskia at gcc dot gnu.org
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: f.heckenbach@fh-soft.de @ 2021-11-05 11:13 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103098
Bug ID: 103098
Summary: bogus error: the last argument must be an 8-bit
immediate
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: f.heckenbach@fh-soft.de
Target Milestone: ---
% cat t.c
long long int __attribute__ ((__vector_size__ (16))) a;
int main (void)
{
a = __builtin_ia32_pslldqi128 (a, 1);
}
% gcc t.c
t.c: In function 'main':
t.c:5:7: error: the last argument must be an 8-bit immediate
a = __builtin_ia32_pslldqi128 (a, 1);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug target/103098] bogus error: the last argument must be an 8-bit immediate
2021-11-05 11:13 [Bug c/103098] New: bogus error: the last argument must be an 8-bit immediate f.heckenbach@fh-soft.de
@ 2021-11-05 11:19 ` pinskia at gcc dot gnu.org
2021-11-05 11:25 ` f.heckenbach@fh-soft.de
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-11-05 11:19 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103098
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Component|c |target
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Don't use the builtin directly as it is not documented.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug target/103098] bogus error: the last argument must be an 8-bit immediate
2021-11-05 11:13 [Bug c/103098] New: bogus error: the last argument must be an 8-bit immediate f.heckenbach@fh-soft.de
2021-11-05 11:19 ` [Bug target/103098] " pinskia at gcc dot gnu.org
@ 2021-11-05 11:25 ` f.heckenbach@fh-soft.de
2021-11-05 13:13 ` rguenth at gcc dot gnu.org
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: f.heckenbach@fh-soft.de @ 2021-11-05 11:25 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103098
--- Comment #2 from Frank Heckenbach <f.heckenbach@fh-soft.de> ---
https://gcc.gnu.org/onlinedocs/gcc/x86-Built-in-Functions.html
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug target/103098] bogus error: the last argument must be an 8-bit immediate
2021-11-05 11:13 [Bug c/103098] New: bogus error: the last argument must be an 8-bit immediate f.heckenbach@fh-soft.de
2021-11-05 11:19 ` [Bug target/103098] " pinskia at gcc dot gnu.org
2021-11-05 11:25 ` f.heckenbach@fh-soft.de
@ 2021-11-05 13:13 ` rguenth at gcc dot gnu.org
2021-11-05 13:17 ` rguenth at gcc dot gnu.org
2021-11-05 13:42 ` jakub at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: rguenth at gcc dot gnu.org @ 2021-11-05 13:13 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103098
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Ever confirmed|0 |1
Last reconfirmed| |2021-11-05
Status|UNCONFIRMED |NEW
Target| |x86_64-*-* i?86-*-*
Keywords| |rejects-valid
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed. We end in the
case V2DI_FTYPE_V2DI_INT_CONVERT:
nargs = 2;
rmode = V1TImode;
nargs_constant = 1;
break;
case, where nargs_constant looks wrong, but maybe I misunderstand it (it isn't
documented - number of args or argument at position?)
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug target/103098] bogus error: the last argument must be an 8-bit immediate
2021-11-05 11:13 [Bug c/103098] New: bogus error: the last argument must be an 8-bit immediate f.heckenbach@fh-soft.de
` (2 preceding siblings ...)
2021-11-05 13:13 ` rguenth at gcc dot gnu.org
@ 2021-11-05 13:17 ` rguenth at gcc dot gnu.org
2021-11-05 13:42 ` jakub at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: rguenth at gcc dot gnu.org @ 2021-11-05 13:17 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103098
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
Of course
BDESC (OPTION_MASK_ISA_SSE2, 0, CODE_FOR_sse2_ashlv1ti3,
"__builtin_ia32_pslldqi128", IX86_BUILTIN_PSLLDQI128, UNKNOWN, (int)
V2DI_FTYPE_V2DI_INT_CONVERT)
looks suspicious, ashlv1ti3 doesn't sound like involving V2DI ...
possibly a V1TI_FTYPE_V1TI_SI_COUNT type is simply missing.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug target/103098] bogus error: the last argument must be an 8-bit immediate
2021-11-05 11:13 [Bug c/103098] New: bogus error: the last argument must be an 8-bit immediate f.heckenbach@fh-soft.de
` (3 preceding siblings ...)
2021-11-05 13:17 ` rguenth at gcc dot gnu.org
@ 2021-11-05 13:42 ` jakub at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: jakub at gcc dot gnu.org @ 2021-11-05 13:42 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103098
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |INVALID
CC| |jakub at gcc dot gnu.org
Status|NEW |RESOLVED
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Re: #c2, the fact that they are listed in documentation doesn't really mean
they are supported, the documentation also doesn't mention what they do and
what constraints they have.
The only supported way is to use the <*intrin.h> intrinsics.
The fact that the above is diagnosed as invalid is right, the builtin requires
that the immediate satisfies const_0_to_255_mul_8_operand predicate.
Yes, the diagnostics isn't fully accurate that it doesn't tell you that the
last argument must be an 8-bit immediate which is a multiple of 8, but handling
it for all the possible cases exactly would be complicated, we e.g. have
(define_predicate "const0_operand"
(define_predicate "const1_operand"
(define_predicate "constm1_operand"
(define_predicate "const8_operand"
(define_predicate "const128_operand"
(define_predicate "const248_operand"
(define_predicate "const123_operand"
(define_predicate "const2367_operand"
(define_predicate "const1248_operand"
(define_predicate "const359_operand"
(define_predicate "const_4_or_8_to_11_operand"
(define_predicate "const48_operand"
(define_predicate "const_0_to_1_operand"
(define_predicate "const_0_to_3_operand"
(define_predicate "const_0_to_4_operand"
(define_predicate "const_0_to_5_operand"
(define_predicate "const_0_to_7_operand"
(define_predicate "const_0_to_15_operand"
(define_predicate "const_0_to_31_operand"
(define_predicate "const_0_to_63_operand"
(define_predicate "const_0_to_255_operand"
(define_predicate "const_0_to_255_mul_8_operand"
(define_predicate "const_1_to_31_operand"
(define_predicate "const_1_to_63_operand"
(define_predicate "const_2_to_3_operand"
(define_predicate "const_4_to_5_operand"
(define_predicate "const_4_to_7_operand"
(define_predicate "const_6_to_7_operand"
(define_predicate "const_8_to_9_operand"
(define_predicate "const_8_to_11_operand"
(define_predicate "const_8_to_15_operand"
(define_predicate "const_10_to_11_operand"
(define_predicate "const_12_to_13_operand"
(define_predicate "const_12_to_15_operand"
(define_predicate "const_14_to_15_operand"
(define_predicate "const_16_to_19_operand"
(define_predicate "const_16_to_31_operand"
(define_predicate "const_20_to_23_operand"
(define_predicate "const_24_to_27_operand"
(define_predicate "const_28_to_31_operand"
used by various instructions, but we'd just waste energy on something that
isn't really needed;
grep __builtin_ia32_pslldqi128 *intrin.h
emmintrin.h: return (__m128i)__builtin_ia32_pslldqi128 (__A, __N * 8);
emmintrin.h: return (__m128i)__builtin_ia32_pslldqi128 (__A, __N * 8);
emmintrin.h: ((__m128i)__builtin_ia32_pslldqi128 ((__m128i)(A), (int)(N) * 8))
emmintrin.h: ((__m128i)__builtin_ia32_pslldqi128 ((__m128i)(A), (int)(N) * 8))
xmmintrin.h: __A128 = __builtin_ia32_pslldqi128 (__A128, 8);
xmmintrin.h: __N128 = __builtin_ia32_pslldqi128 (__N128, 8);
xmmintrin.h: __A128 = __builtin_ia32_pslldqi128 (__A128, 2 * 8);
xmmintrin.h: __N128 = __builtin_ia32_pslldqi128 (__N128, 2 * 8);
xmmintrin.h: __A128 = __builtin_ia32_pslldqi128 (__A128, 3 * 8);
xmmintrin.h: __N128 = __builtin_ia32_pslldqi128 (__N128, 3 * 8);
xmmintrin.h: __A128 = __builtin_ia32_pslldqi128 (__A128, 4 * 8);
xmmintrin.h: __N128 = __builtin_ia32_pslldqi128 (__N128, 4 * 8);
xmmintrin.h: __A128 = __builtin_ia32_pslldqi128 (__A128, 5 * 8);
xmmintrin.h: __N128 = __builtin_ia32_pslldqi128 (__N128, 5 * 8);
xmmintrin.h: __A128 = __builtin_ia32_pslldqi128 (__A128, 6 * 8);
xmmintrin.h: __N128 = __builtin_ia32_pslldqi128 (__N128, 6 * 8);
xmmintrin.h: __A128 = __builtin_ia32_pslldqi128 (__A128, 7 * 8);
xmmintrin.h: __N128 = __builtin_ia32_pslldqi128 (__N128, 7 * 8);
xmmintrin.h: __A128 = __builtin_ia32_pslldqi128 (__A128, 8 * 8);
xmmintrin.h: __N128 = __builtin_ia32_pslldqi128 (__N128, 8 * 8);
All the intrinsics already ensure it in this case.
So, I'll repeat, don't use __builtin_ia32_* directly, they can go away any
time, or change calling conventions incompatibly etc.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2021-11-05 13:42 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-05 11:13 [Bug c/103098] New: bogus error: the last argument must be an 8-bit immediate f.heckenbach@fh-soft.de
2021-11-05 11:19 ` [Bug target/103098] " pinskia at gcc dot gnu.org
2021-11-05 11:25 ` f.heckenbach@fh-soft.de
2021-11-05 13:13 ` rguenth at gcc dot gnu.org
2021-11-05 13:17 ` rguenth at gcc dot gnu.org
2021-11-05 13:42 ` jakub at gcc dot gnu.org
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).