1 ; RUN: llc -march=mips -relocation-model=pic < %s \ 2 ; RUN: | FileCheck --check-prefixes=CHECK,EB %s 3 ; RUN: llc -march=mipsel -relocation-model=pic < %s \ 4 ; RUN: | FileCheck --check-prefixes=CHECK,EL %s 5 6 ; Simple memory 7 @g1 = external global i32 8 9 define i32 @f1(i32 %x) nounwind { 10 entry: 11 ; CHECK-LABEL: f1: 12 ; CHECK: #APP 13 ; CHECK: sw $4, [[OFFSET:[0-9]+]]($sp) 14 ; CHECK: #NO_APP 15 ; CHECK: lw $[[T1:[0-9]+]], %got(g1) 16 ; CHECK: #APP 17 ; CHECK: lw $[[T3:[0-9]+]], [[OFFSET]]($sp) 18 ; CHECK: #NO_APP 19 ; CHECK: sw $[[T3]], 0($[[T1]]) 20 21 %l1 = alloca i32, align 4 22 call void asm "sw $1, $0", "=*m,r"(i32* %l1, i32 %x) nounwind 23 %0 = call i32 asm "lw $0, $1", "=r,*m"(i32* %l1) nounwind 24 store i32 %0, i32* @g1, align 4 25 ret i32 %0 26 } 27 28 ; CHECK-LABEL: main: 29 ; "D": Second word of a double word. This works for any memory element 30 ; double or single. 31 ; CHECK: #APP 32 ; CHECK: lw ${{[0-9]+}}, 16(${{[0-9]+}}) 33 ; CHECK: #NO_APP 34 35 ; No "D": First word of a double word. This works for any memory element 36 ; double or single. 37 ; CHECK: #APP 38 ; CHECK: lw ${{[0-9]+}}, 12(${{[0-9]+}}) 39 ; CHECK: #NO_APP 40 41 ; "M": High-order word of a double word. 42 ; CHECK: #APP 43 ; EB: lw ${{[0-9]+}}, 12(${{[0-9]+}}) 44 ; EL: lw ${{[0-9]+}}, 16(${{[0-9]+}}) 45 ; CHECK: #NO_APP 46 47 ; "L": Low-order word of a double word. 48 ; CHECK: #APP 49 ; EB: lw ${{[0-9]+}}, 16(${{[0-9]+}}) 50 ; EL: lw ${{[0-9]+}}, 12(${{[0-9]+}}) 51 ; CHECK: #NO_APP 52 53 @b = common global [20 x i32] zeroinitializer, align 4 54 55 define void @main() { 56 entry: 57 ; Second word: 58 tail call void asm sideeffect " lw $0, ${1:D}", "r,*m,~{$11}"(i32 undef, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @b, i32 0, i32 3)) 59 ; First word. Notice, no 'D': 60 tail call void asm sideeffect " lw $0, ${1}", "r,*m,~{$11}"(i32 undef, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @b, i32 0, i32 3)) 61 62 ; High-order part. 63 tail call void asm sideeffect " lw $0, ${1:M}", "r,*m,~{$11}"(i32 undef, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @b, i32 0, i32 3)) 64 ; Low-order part. 65 tail call void asm sideeffect " lw $0, ${1:L}", "r,*m,~{$11}"(i32 undef, i32* getelementptr inbounds ([20 x i32], [20 x i32]* @b, i32 0, i32 3)) 66 ret void 67 } 68