https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99388
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
The above patch changes:
--- pr99388.s 2021-03-04 15:47:31.151944020 +0100
+++ pr99388.s 2021-03-04 15:51:51.404086604 +0100
@@ -267,18 +267,21 @@ foo:
.byte 0x4 // uleb128 0x4; Location expression size
.byte 0x9e // DW_OP_implicit_value
.byte 0x2 // uleb128 0x2
+ .2byte 0x3c00 // fp or vector constant word 0
.byte 0x7 // DW_LLE_start_end (*.LLST0)
.8byte .LVL1 // Location list begin address (*.LLST0)
.8byte .LVL2 // Location list end address (*.LLST0)
.byte 0x4 // uleb128 0x4; Location expression size
.byte 0x9e // DW_OP_implicit_value
.byte 0x2 // uleb128 0x2
+ .2byte 0x4000 // fp or vector constant word 0
.byte 0x7 // DW_LLE_start_end (*.LLST0)
.8byte .LVL2 // Location list begin address (*.LLST0)
.8byte .LFE0 // Location list end address (*.LLST0)
.byte 0x4 // uleb128 0x4; Location expression size
.byte 0x9e // DW_OP_implicit_value
.byte 0x2 // uleb128 0x2
+ .2byte 0x4200 // fp or vector constant word 0
.byte 0 // DW_LLE_end_of_list (*.LLST0)
.LVUS1:
.uleb128 .LVU3 // View list begin (*.LVUS1)
I fear there are other bugs related to handling vector constants, because for
vectors of floats/doubles/__fp16 etc. we use eltsize of the element size rather
than 4 (or for __fp16 2).
But then we throw such debug info on the floor during expansion, so maybe we
don't trigger that so often.