Skip to content

Instantly share code, notes, and snippets.

@nikic

nikic/x86-sfb Secret

Created December 8, 2018 23:53
Show Gist options
  • Save nikic/61b5ac3390755b17dd542cd8131b926a to your computer and use it in GitHub Desktop.
Save nikic/61b5ac3390755b17dd542cd8131b926a to your computer and use it in GitHub Desktop.
# *** IR Dump After X86 Optimize Call Frame ***:
# Machine code for function test_offset: IsSSA, TracksLiveness
Frame Objects:
fi#0: size=128, align=16, at location [SP+8]
Function Live Ins: $rdi in %0
bb.0.entry:
liveins: $rdi
%0:gr64 = COPY $rdi
MOV8mi %0:gr64, 1, $noreg, 7, $noreg, 0 :: (volatile store 1 into %ir.gep0)
MOV16mi %0:gr64, 1, $noreg, 5, $noreg, 0 :: (volatile store 2 into %ir.bc1)
MOV32mi %0:gr64, 1, $noreg, 1, $noreg, 0 :: (volatile store 4 into %ir.bc2)
%1:vr128 = VMOVDQUrm %0:gr64, 1, $noreg, -4, $noreg :: (load 16 from %ir.y1, align 1)
VMOVDQAmr %stack.0.z, 1, $noreg, 0, $noreg, killed %1:vr128 :: (store 16 into %ir.y2)
%2:gr8 = MOV8rm %stack.0.z, 1, $noreg, 4, $noreg :: (dereferenceable load 1 from %ir.gep4, align 4)
$al = COPY %2:gr8
RET 0, $al
# End machine code for function test_offset.
# *** IR Dump After X86 Avoid Store Forwarding Blocks ***:
# Machine code for function test_offset: IsSSA, TracksLiveness
Frame Objects:
fi#0: size=128, align=16, at location [SP+8]
Function Live Ins: $rdi in %0
bb.0.entry:
liveins: $rdi
%0:gr64 = COPY $rdi
MOV8mi %0:gr64, 1, $noreg, 7, $noreg, 0 :: (volatile store 1 into %ir.gep0)
MOV16mi %0:gr64, 1, $noreg, 5, $noreg, 0 :: (volatile store 2 into %ir.bc1)
MOV32mi %0:gr64, 1, $noreg, 1, $noreg, 0 :: (volatile store 4 into %ir.bc2)
%3:gr16 = MOV16rm %0:gr64, 1, $noreg, -4, $noreg :: (load 2 from %ir.y1, align 1)
MOV16mr %stack.0.z, 1, $noreg, 0, $noreg, killed %3:gr16 :: (store 2 into %ir.y2, align 16)
%4:gr8 = MOV8rm %0:gr64, 1, $noreg, -2, $noreg :: (load 1 from %ir.y1 + 2)
MOV8mr %stack.0.z, 1, $noreg, 2, $noreg, killed %4:gr8 :: (store 1 into %ir.y2 + 2, align 16)
%5:gr32 = MOV32rm %0:gr64, 1, $noreg, 1, $noreg :: (load 4 from %ir.y1 + 3, align 1)
MOV32mr %stack.0.z, 1, $noreg, 5, $noreg, killed %5:gr32 :: (store 4 into %ir.y2 + 3, align 16)
%6:gr16 = MOV16rm %0:gr64, 1, $noreg, 5, $noreg :: (load 2 from %ir.y1 + 7, align 1)
MOV16mr %stack.0.z, 1, $noreg, 9, $noreg, killed %6:gr16 :: (store 2 into %ir.y2 + 7, align 16)
%7:gr8 = MOV8rm %0:gr64, 1, $noreg, 7, $noreg :: (load 1 from %ir.y1 + 9)
MOV8mr %stack.0.z, 1, $noreg, 11, $noreg, killed %7:gr8 :: (store 1 into %ir.y2 + 9, align 16)
%8:gr32 = MOV32rm %0:gr64, 1, $noreg, 8, $noreg :: (load 4 from %ir.y1 + 10, align 1)
MOV32mr %stack.0.z, 1, $noreg, 12, $noreg, killed %8:gr32 :: (store 4 into %ir.y2 + 10, align 16)
%2:gr8 = MOV8rm %stack.0.z, 1, $noreg, 4, $noreg :: (dereferenceable load 1 from %ir.gep4, align 4)
$al = COPY %2:gr8
RET 0, $al
# End machine code for function test_offset.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment