Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(309)

Issue 25809002: Forward stores to loads for SIMD arrays (Closed)

Created:
7 years, 2 months ago by Cutch
Modified:
7 years, 2 months ago
Reviewers:
srdjan
CC:
reviews_dartlang.org, vm-dev_dartlang.org
Visibility:
Public.

Description

Forward stores to loads for SIMD arrays R=srdjan@google.com Committed: http://code.google.com/p/dart/source/detail?r=28467

Patch Set 1 #

Patch Set 2 : #

Patch Set 3 : #

Patch Set 4 : #

Unified diffs Side-by-side diffs Delta from patch set Stats (+35 lines, -4 lines) Patch
M runtime/vm/flow_graph_optimizer.cc View 1 1 chunk +5 lines, -4 lines 0 comments Download
A tests/lib/typed_data/simd_store_to_load_forward_test.dart View 1 2 1 chunk +30 lines, -0 lines 0 comments Download

Messages

Total messages: 3 (0 generated)
Cutch
7 years, 2 months ago (2013-10-02 22:19:28 UTC) #1
srdjan
LGTM after adding a test that verifies the optimization.
7 years, 2 months ago (2013-10-03 16:14:05 UTC) #2
Cutch
7 years, 2 months ago (2013-10-10 17:43:07 UTC) #3
On 2013/10/03 16:14:05, srdjan wrote:
> LGTM after adding a test that verifies the optimization.

Added test. 

Before:

        ;; Enter frame
0xf3109e20    55                     push ebp
0xf3109e21    89e5                   mov ebp,esp
0xf3109e23    e800000000             call 0xf3109e28
        ;; B0
        ;; B1
0xf3109e28    8b550c                 mov edx,[ebp+0xc]
0xf3109e2b    8b4d08                 mov ecx,[ebp+0x8]
        ;; CheckStackOverflow:4()
0xf3109e2e    3b2548e2420a           cmp esp,[0xa42e248]
0xf3109e34    0f8673000000           jna 0xf3109ead
        ;; CheckClass:18(v1 IC[1: _Float32x4Array@0x6006a0b #5000 <0xf319b801>])
0xf3109e3a    f6c201                 test_b edx,0x1
0xf3109e3d    0f8497000000           jz 0xf3109eda
0xf3109e43    0fb75a01               movzx_w ebx,[edx+0x1]
0xf3109e47    83fb4b                 cmp ebx,0x4b
0xf3109e4a    0f858a000000           jnz 0xf3109eda
        ;; v5 <- LoadField:48(v1 T{not-null, _Float32x4Array@0x6006a0b, ?}, 4,
immutable=1) [0, 1073741823] T{not-null, _Smi@0x36924d72, ?}
0xf3109e50    8b5a03                 mov ebx,[edx+0x3]
        ;; CheckArrayBound:18(v5, v3)
0xf3109e53    83fb02                 cmp ebx,0x2
0xf3109e56    0f8684000000           jna 0xf3109ee0
        ;; CheckClass:18(v2 IC[1: _Float32x4@0x6006a0b #5000 <0xf319b801>])
0xf3109e5c    f6c101                 test_b ecx,0x1
0xf3109e5f    0f8481000000           jz 0xf3109ee6
0xf3109e65    0fb75901               movzx_w ebx,[ecx+0x1]
0xf3109e69    83fb37                 cmp ebx,0x37
0xf3109e6c    0f8574000000           jnz 0xf3109ee6
        ;; v8 <- UnboxFloat32x4:18(v2 T{not-null, _Float32x4@0x6006a0b, ?})
T{not-null, _Float32x4@0x6006a0b, ?}
0xf3109e72    0f104903               movups xmm1,[ecx+0x3]
        ;; StoreIndexed:18(v1 T{not-null, _Float32x4Array@0x6006a0b, ?}, v3, v8)
T{null, dynamic, Type: class 'dynamic'}
0xf3109e76    0f114a17               movups xmm1,[edx+0x17]
        ;; v7 <- LoadIndexed(v1 T{not-null, _Float32x4Array@0x6006a0b, ?}, v3)
T{not-null, _Float32x4@0x6006a0b, ?}
0xf3109e7a    0f104a17               movups xmm1,[edx+0x17]
        ;; v9 <- BoxFloat32x4:72(v7) T{not-null, _Float32x4@0x6006a0b, ?}
0xf3109e7e    8b05d8dd410a           mov eax,[0xa41ddd8]
0xf3109e84    83c018                 add eax,0x18
0xf3109e87    3b05dcdd410a           cmp eax,[0xa41dddc]
0xf3109e8d    0f8332000000           jnc 0xf3109ec5
0xf3109e93    8905d8dd410a           mov [0xa41ddd8],eax
0xf3109e99    83e817                 sub eax,0x17
0xf3109e9c    c740ff00033700         mov [eax-0x1],0x370300
0xf3109ea3    0f114803               movups xmm1,[eax+0x3]
        ;; ParallelMove eax <- eax
        ;; Return:34(v9)


After:
        ;; Enter frame
0xf30d8e60    55                     push ebp
0xf30d8e61    89e5                   mov ebp,esp
0xf30d8e63    e800000000             call 0xf30d8e68
        ;; Check argument count
0xf30d8e68    8b420b                 mov eax,[edx+0xb]
0xf30d8e6b    83f804                 cmp eax,0x4
0xf30d8e6e    7505                   jnz 0xf30d8e75
0xf30d8e70    3b420f                 cmp eax,[edx+0xf]
0xf30d8e73    740d                   jz 0xf30d8e82
0xf30d8e75    50                     push eax
0xf30d8e76    b89a5bb508             mov eax,0x8b55b9a
0xf30d8e7b    e840e22a02             call 0xf53870c0  [stub: PrintStopMessage]
0xf30d8e80    58                     pop eax
0xf30d8e81    cc                     int3
        ;; B0
        ;; B1
0xf30d8e82    8b4d0c                 mov ecx,[ebp+0xc]
0xf30d8e85    8b4508                 mov eax,[ebp+0x8]
        ;; CheckClass:18(v1 IC[1: _Float32x4Array@0x6006a0b #5000 <0xf31698c1>])
0xf30d8e88    f6c101                 test_b ecx,0x1
0xf30d8e8b    0f8446000000           jz 0xf30d8ed7
0xf30d8e91    0fb75101               movzx_w edx,[ecx+0x1]
0xf30d8e95    83fa4b                 cmp edx,0x4b
0xf30d8e98    0f8539000000           jnz 0xf30d8ed7
        ;; v5 <- LoadField:48(v1 T{not-null, _Float32x4Array@0x6006a0b, ?}, 4,
immutable=1) [0, 1073741823] T{not-null, _Smi@0x36924d72, ?}
0xf30d8e9e    8b5103                 mov edx,[ecx+0x3]
        ;; CheckArrayBound:18(v5, v3)
0xf30d8ea1    83fa02                 cmp edx,0x2
0xf30d8ea4    0f8633000000           jna 0xf30d8edd
        ;; CheckClass:18(v2 IC[1: _Float32x4@0x6006a0b #5000 <0xf31698c1>])
0xf30d8eaa    a801                   test al,0x1
0xf30d8eac    0f8431000000           jz 0xf30d8ee3
0xf30d8eb2    0fb75001               movzx_w edx,[eax+0x1]
0xf30d8eb6    83fa37                 cmp edx,0x37
0xf30d8eb9    0f8524000000           jnz 0xf30d8ee3
        ;; v8 <- UnboxFloat32x4:18(v2 T{not-null, _Float32x4@0x6006a0b, ?})
T{not-null, _Float32x4@0x6006a0b, ?}
0xf30d8ebf    0f104803               movups xmm1,[eax+0x3]
        ;; StoreIndexed:18(v1 T{not-null, _Float32x4Array@0x6006a0b, ?}, v3, v8)
T{null, dynamic, Type: class 'dynamic'}
0xf30d8ec3    0f114917               movups xmm1,[ecx+0x17]
        ;; ParallelMove eax <- eax
        ;; Return:34(v2 T{not-null, _Float32x4@0x6006a0b, ?})

Powered by Google App Engine
This is Rietveld 408576698