https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115943
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
x86_64:
```
_ZN7MyClass4callEv:
.LVL0:
.LFB1:
.file 1 "/app/example.cpp"
.loc 1 7 22 view -0
.cfi_startproc
.loc 1 8 5 view .LVU1
.loc 1 8 23 is_stmt 0 view .LVU2
movb $1, 0
.loc 1 9 1 view .LVU3
ret
.cfi_endproc
```
aarch64:
```
_ZN7MyClass4callEv:
.LVL0:
.LFB1:
.file 1 "/app/example.cpp"
.loc 1 7 22 view -0
.cfi_startproc
.loc 1 8 5 view .LVU1
.loc 1 8 23 is_stmt 0 view .LVU2
mov x0, 0
.LVL1:
.loc 1 8 23 view .LVU3
mov w1, 1
strb w1, [x0]
.loc 1 9 1 view .LVU4
ret
.cfi_endproc
```
I am not sure this is a bug. line 7 is the start of the function, the open `{`.
line 8 is the complete statement.
In the case of x86_64 there is only one instruction which is for both
statements. While in aarch64 there are 2 (well 3) instructions available. One
of the nullptr and 2 for the store.
The gimple dump is:
```
;; starting at line 8
[/app/example.cpp:8:5] # DEBUG BEGIN_STMT
[/app/example.cpp:8:23] # .MEM_2 = VDEF <.MEM_1(D)>
[/app/example.cpp:8:5] MEM[(charD.11 *)0B] = 1;
[/app/example.cpp:9:1] # VUSE <.MEM_2>
```
Which is exactly what you expect.
Expand is:
```
(note 4 1 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
(insn 2 4 3 2 (set (reg/f:DI 98 [ thisD.2813 ])
(reg:DI 5 di [ thisD.2813 ])) "/app/example.cpp":7:22 -1
(nil))
(note 3 2 6 2 NOTE_INSN_FUNCTION_BEG)
(debug_insn 6 3 7 2 (debug_marker) "/app/example.cpp":8:5 -1
(nil))
(insn 7 6 8 2 (set (reg/f:DI 99)
(const_int 0 [0])) "/app/example.cpp":8:23 -1
(nil))
(insn 8 7 0 2 (set (mem:QI (reg/f:DI 99) [0 [/app/example.cpp:8:5]
MEM[(charD.10 *)0B]+0 S1 A128])
(const_int 1 [0x1])) "/app/example.cpp":8:23 -1
(nil))
```
Which is even more of what you expect.
fwprop changes:
```
(debug_insn 6 3 8 2 (debug_marker) "/app/example.cpp":8:5 -1
(nil))
(insn 7 6 8 2 (set (reg/f:DI 99)
(const_int 0 [0])) "/app/example.cpp":8:23 88 {*movdi_internal}
(nil))
(insn 8 7 0 2 (set (mem:QI (reg/f:DI 99) [0 [/app/example.cpp:8:5]
MEM[(charD.10 *)0B]+0 S1 A128])
(const_int 1 [0x1])) "/app/example.cpp":8:23 91 {*movqi_internal}
(expr_list:REG_DEAD (reg/f:DI 99)
(nil)))
```
into:
```
(debug_insn 6 3 8 2 (debug_marker) "/app/example.cpp":8:5 -1
(nil))
(insn 8 6 0 2 (set (mem:QI (const_int 0 [0]) [0 [/app/example.cpp:8:5]
MEM[(charD.10 *)0B]+0 S1 A128])
(const_int 1 [0x1])) "/app/example.cpp":8:23 91 {*movqi_internal}
(nil))
```
So nothing interesting and seems all right.