Home | History | Annotate | Download | only in Mips
      1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
      2 ; RUN: llc -O0 -mtriple=mipsel-unknown-linux-gnu -mcpu=mips32r2 -target-abi=o32 < %s -filetype=asm -o - \
      3 ; RUN:   | FileCheck -check-prefixes=O32 %s
      4 ; RUN: llc -O0 -mtriple=mips64el-unknown-linux-gnu -mcpu=mips64r2 -target-abi=n32 < %s -filetype=asm -o - \
      5 ; RUN:   | FileCheck  -check-prefixes=N32,ALL %s
      6 ; RUN: llc -O0 -mtriple=mips64el-unknown-linux-gnu -mcpu=mips64r2 -target-abi=n64 < %s -filetype=asm -o - \
      7 ; RUN:   | FileCheck -check-prefixes=N64 %s
      8 
      9 @sym = external global i32 *
     10 
     11 define void @foo(i32 %new, i32 %old) {
     12 ; O32-LABEL: foo:
     13 ; O32:       # %bb.0: # %entry
     14 ; O32-NEXT:    addiu $sp, $sp, -16
     15 ; O32-NEXT:    .cfi_def_cfa_offset 16
     16 ; O32-NEXT:    move $1, $5
     17 ; O32-NEXT:    move $2, $4
     18 ; O32-NEXT:    lui $3, %hi(sym)
     19 ; O32-NEXT:    lw $3, %lo(sym)($3)
     20 ; O32-NEXT:    sync
     21 ; O32-NEXT:    lw $6, 12($sp) # 4-byte Folded Reload
     22 ; O32-NEXT:  $BB0_1: # %entry
     23 ; O32-NEXT:    # =>This Inner Loop Header: Depth=1
     24 ; O32-NEXT:    ll $7, 0($3)
     25 ; O32-NEXT:    bne $7, $4, $BB0_3
     26 ; O32-NEXT:    nop
     27 ; O32-NEXT:  # %bb.2: # %entry
     28 ; O32-NEXT:    # in Loop: Header=BB0_1 Depth=1
     29 ; O32-NEXT:    move $8, $5
     30 ; O32-NEXT:    sc $8, 0($3)
     31 ; O32-NEXT:    beqz $8, $BB0_1
     32 ; O32-NEXT:    nop
     33 ; O32-NEXT:  $BB0_3: # %entry
     34 ; O32-NEXT:    sync
     35 ; O32-NEXT:    sw $7, 12($sp) # 4-byte Folded Spill
     36 ; O32-NEXT:    sw $6, 8($sp) # 4-byte Folded Spill
     37 ; O32-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
     38 ; O32-NEXT:    sw $2, 0($sp) # 4-byte Folded Spill
     39 ; O32-NEXT:    addiu $sp, $sp, 16
     40 ; O32-NEXT:    jr $ra
     41 ; O32-NEXT:    nop
     42 ;
     43 ; N32-LABEL: foo:
     44 ; N32:       # %bb.0: # %entry
     45 ; N32-NEXT:    addiu $sp, $sp, -16
     46 ; N32-NEXT:    .cfi_def_cfa_offset 16
     47 ; N32-NEXT:    move $1, $5
     48 ; N32-NEXT:    sll $1, $1, 0
     49 ; N32-NEXT:    move $2, $4
     50 ; N32-NEXT:    sll $2, $2, 0
     51 ; N32-NEXT:    lui $3, %hi(sym)
     52 ; N32-NEXT:    lw $3, %lo(sym)($3)
     53 ; N32-NEXT:    sync
     54 ; N32-NEXT:    lw $6, 12($sp) # 4-byte Folded Reload
     55 ; N32-NEXT:  .LBB0_1: # %entry
     56 ; N32-NEXT:    # =>This Inner Loop Header: Depth=1
     57 ; N32-NEXT:    ll $7, 0($3)
     58 ; N32-NEXT:    bne $7, $2, .LBB0_3
     59 ; N32-NEXT:    nop
     60 ; N32-NEXT:  # %bb.2: # %entry
     61 ; N32-NEXT:    # in Loop: Header=BB0_1 Depth=1
     62 ; N32-NEXT:    move $8, $1
     63 ; N32-NEXT:    sc $8, 0($3)
     64 ; N32-NEXT:    beqz $8, .LBB0_1
     65 ; N32-NEXT:    nop
     66 ; N32-NEXT:  .LBB0_3: # %entry
     67 ; N32-NEXT:    sync
     68 ; N32-NEXT:    sw $7, 12($sp) # 4-byte Folded Spill
     69 ; N32-NEXT:    sw $6, 8($sp) # 4-byte Folded Spill
     70 ; N32-NEXT:    addiu $sp, $sp, 16
     71 ; N32-NEXT:    jr $ra
     72 ; N32-NEXT:    nop
     73 ;
     74 ; N64-LABEL: foo:
     75 ; N64:       # %bb.0: # %entry
     76 ; N64-NEXT:    daddiu $sp, $sp, -16
     77 ; N64-NEXT:    .cfi_def_cfa_offset 16
     78 ; N64-NEXT:    move $1, $5
     79 ; N64-NEXT:    sll $1, $1, 0
     80 ; N64-NEXT:    move $2, $4
     81 ; N64-NEXT:    sll $2, $2, 0
     82 ; N64-NEXT:    lui $4, %highest(sym)
     83 ; N64-NEXT:    daddiu $4, $4, %higher(sym)
     84 ; N64-NEXT:    dsll $4, $4, 16
     85 ; N64-NEXT:    daddiu $4, $4, %hi(sym)
     86 ; N64-NEXT:    dsll $4, $4, 16
     87 ; N64-NEXT:    ld $4, %lo(sym)($4)
     88 ; N64-NEXT:    sync
     89 ; N64-NEXT:    lw $3, 12($sp) # 4-byte Folded Reload
     90 ; N64-NEXT:  .LBB0_1: # %entry
     91 ; N64-NEXT:    # =>This Inner Loop Header: Depth=1
     92 ; N64-NEXT:    ll $6, 0($4)
     93 ; N64-NEXT:    bne $6, $2, .LBB0_3
     94 ; N64-NEXT:    nop
     95 ; N64-NEXT:  # %bb.2: # %entry
     96 ; N64-NEXT:    # in Loop: Header=BB0_1 Depth=1
     97 ; N64-NEXT:    move $7, $1
     98 ; N64-NEXT:    sc $7, 0($4)
     99 ; N64-NEXT:    beqz $7, .LBB0_1
    100 ; N64-NEXT:    nop
    101 ; N64-NEXT:  .LBB0_3: # %entry
    102 ; N64-NEXT:    sync
    103 ; N64-NEXT:    sw $6, 12($sp) # 4-byte Folded Spill
    104 ; N64-NEXT:    sw $3, 8($sp) # 4-byte Folded Spill
    105 ; N64-NEXT:    daddiu $sp, $sp, 16
    106 ; N64-NEXT:    jr $ra
    107 ; N64-NEXT:    nop
    108 entry:
    109   %0 = load i32 *, i32 ** @sym
    110   cmpxchg i32 * %0, i32 %new, i32 %old seq_cst seq_cst
    111   ret void
    112 }
    113 
    114