brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · 1b73a41 Raw
128 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mcpu=corei7 -mtriple=i686-- -verify-machineinstrs | FileCheck %s --check-prefix=CHECK --check-prefix=SSE423; RUN: llc < %s -mtriple=i686-- -verify-machineinstrs | FileCheck %s --check-prefix=CHECK --check-prefix=NOSSE4 5; 64-bit load/store on x86-326; FIXME: The generated code can be substantially improved.7 8define void @test1(ptr %ptr, i64 %val1) {9; SSE42-LABEL: test1:10; SSE42:       # %bb.0:11; SSE42-NEXT:    movl {{[0-9]+}}(%esp), %eax12; SSE42-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero13; SSE42-NEXT:    movlps %xmm0, (%eax)14; SSE42-NEXT:    lock orl $0, (%esp)15; SSE42-NEXT:    retl16;17; NOSSE-LABEL: test1:18; NOSSE:       # %bb.0:19; NOSSE-NEXT:    pushl %ebp20; NOSSE-NEXT:    .cfi_def_cfa_offset 821; NOSSE-NEXT:    .cfi_offset %ebp, -822; NOSSE-NEXT:    movl %esp, %ebp23; NOSSE-NEXT:    .cfi_def_cfa_register %ebp24; NOSSE-NEXT:    andl $-8, %esp25; NOSSE-NEXT:    subl $8, %esp26; NOSSE-NEXT:    movl 8(%ebp), %eax27; NOSSE-NEXT:    movl 12(%ebp), %ecx28; NOSSE-NEXT:    movl 16(%ebp), %edx29; NOSSE-NEXT:    movl %edx, {{[0-9]+}}(%esp)30; NOSSE-NEXT:    movl %ecx, (%esp)31; NOSSE-NEXT:    fildll (%esp)32; NOSSE-NEXT:    fistpll (%eax)33; NOSSE-NEXT:    lock orl $0, (%esp)34; NOSSE-NEXT:    movl %ebp, %esp35; NOSSE-NEXT:    popl %ebp36; NOSSE-NEXT:    .cfi_def_cfa %esp, 437; NOSSE-NEXT:    retl38  store atomic i64 %val1, ptr %ptr seq_cst, align 839  ret void40}41 42define i64 @test2(ptr %ptr) {43; SSE42-LABEL: test2:44; SSE42:       # %bb.0:45; SSE42-NEXT:    movl {{[0-9]+}}(%esp), %eax46; SSE42-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero47; SSE42-NEXT:    movd %xmm0, %eax48; SSE42-NEXT:    pextrd $1, %xmm0, %edx49; SSE42-NEXT:    retl50;51; NOSSE-LABEL: test2:52; NOSSE:       # %bb.0:53; NOSSE-NEXT:    pushl %ebp54; NOSSE-NEXT:    .cfi_def_cfa_offset 855; NOSSE-NEXT:    .cfi_offset %ebp, -856; NOSSE-NEXT:    movl %esp, %ebp57; NOSSE-NEXT:    .cfi_def_cfa_register %ebp58; NOSSE-NEXT:    andl $-8, %esp59; NOSSE-NEXT:    subl $8, %esp60; NOSSE-NEXT:    movl 8(%ebp), %eax61; NOSSE-NEXT:    fildll (%eax)62; NOSSE-NEXT:    fistpll (%esp)63; NOSSE-NEXT:    movl (%esp), %eax64; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %edx65; NOSSE-NEXT:    movl %ebp, %esp66; NOSSE-NEXT:    popl %ebp67; NOSSE-NEXT:    .cfi_def_cfa %esp, 468; NOSSE-NEXT:    retl69  %val = load atomic i64, ptr %ptr seq_cst, align 870  ret i64 %val71}72 73; Same as test2, but with noimplicitfloat.74define i64 @test3(ptr %ptr) noimplicitfloat {75; CHECK-LABEL: test3:76; CHECK:       # %bb.0:77; CHECK-NEXT:    pushl %ebx78; CHECK-NEXT:    .cfi_def_cfa_offset 879; CHECK-NEXT:    pushl %esi80; CHECK-NEXT:    .cfi_def_cfa_offset 1281; CHECK-NEXT:    .cfi_offset %esi, -1282; CHECK-NEXT:    .cfi_offset %ebx, -883; CHECK-NEXT:    movl {{[0-9]+}}(%esp), %esi84; CHECK-NEXT:    xorl %eax, %eax85; CHECK-NEXT:    xorl %edx, %edx86; CHECK-NEXT:    xorl %ecx, %ecx87; CHECK-NEXT:    xorl %ebx, %ebx88; CHECK-NEXT:    lock cmpxchg8b (%esi)89; CHECK-NEXT:    popl %esi90; CHECK-NEXT:    .cfi_def_cfa_offset 891; CHECK-NEXT:    popl %ebx92; CHECK-NEXT:    .cfi_def_cfa_offset 493; CHECK-NEXT:    retl94  %val = load atomic i64, ptr %ptr seq_cst, align 895  ret i64 %val96}97 98define i64 @test4(ptr %ptr) {99; SSE42-LABEL: test4:100; SSE42:       # %bb.0:101; SSE42-NEXT:    movl {{[0-9]+}}(%esp), %eax102; SSE42-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero103; SSE42-NEXT:    movd %xmm0, %eax104; SSE42-NEXT:    pextrd $1, %xmm0, %edx105; SSE42-NEXT:    retl106;107; NOSSE-LABEL: test4:108; NOSSE:       # %bb.0:109; NOSSE-NEXT:    pushl %ebp110; NOSSE-NEXT:    .cfi_def_cfa_offset 8111; NOSSE-NEXT:    .cfi_offset %ebp, -8112; NOSSE-NEXT:    movl %esp, %ebp113; NOSSE-NEXT:    .cfi_def_cfa_register %ebp114; NOSSE-NEXT:    andl $-8, %esp115; NOSSE-NEXT:    subl $8, %esp116; NOSSE-NEXT:    movl 8(%ebp), %eax117; NOSSE-NEXT:    fildll (%eax)118; NOSSE-NEXT:    fistpll (%esp)119; NOSSE-NEXT:    movl (%esp), %eax120; NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %edx121; NOSSE-NEXT:    movl %ebp, %esp122; NOSSE-NEXT:    popl %ebp123; NOSSE-NEXT:    .cfi_def_cfa %esp, 4124; NOSSE-NEXT:    retl125  %val = load atomic volatile i64, ptr %ptr seq_cst, align 8126  ret i64 %val127}128