| Amara Emerson | 854d10d | 2018-01-02 16:30:47 +0000 | [diff] [blame] | 1 | ; RUN: llc -O0 -fast-isel -fast-isel-abort=1 -verify-machineinstrs -relocation-model=dynamic-no-pic -mtriple=arm64-apple-ios < %s | FileCheck %s --check-prefix=ARM64 |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 2 | |
| 3 | @message = global [80 x i8] c"The LLVM Compiler Infrastructure\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00", align 16 |
| 4 | @temp = common global [80 x i8] zeroinitializer, align 16 |
| 5 | |
| 6 | define void @t1() { |
| Tim Northover | 970c4a8 | 2014-04-30 11:19:40 +0000 | [diff] [blame] | 7 | ; ARM64-LABEL: t1 |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 8 | ; ARM64: adrp x8, _message@PAGE |
| 9 | ; ARM64: add x0, x8, _message@PAGEOFF |
| Juergen Ributzka | 7e23f77 | 2014-08-19 19:44:02 +0000 | [diff] [blame] | 10 | ; ARM64: mov w9, wzr |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 11 | ; ARM64: uxtb w1, w9 |
| Reid Kleckner | 3a7a2e4 | 2018-03-14 21:54:21 +0000 | [diff] [blame] | 12 | ; ARM64: mov x2, #80 |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 13 | ; ARM64: bl _memset |
| Daniel Neilson | 1e68724 | 2018-01-19 17:13:12 +0000 | [diff] [blame] | 14 | call void @llvm.memset.p0i8.i64(i8* align 16 getelementptr inbounds ([80 x i8], [80 x i8]* @message, i32 0, i32 0), i8 0, i64 80, i1 false) |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 15 | ret void |
| 16 | } |
| 17 | |
| Daniel Neilson | 1e68724 | 2018-01-19 17:13:12 +0000 | [diff] [blame] | 18 | declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i1) |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 19 | |
| 20 | define void @t2() { |
| Tim Northover | 970c4a8 | 2014-04-30 11:19:40 +0000 | [diff] [blame] | 21 | ; ARM64-LABEL: t2 |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 22 | ; ARM64: adrp x8, _temp@GOTPAGE |
| 23 | ; ARM64: ldr x0, [x8, _temp@GOTPAGEOFF] |
| 24 | ; ARM64: adrp x8, _message@PAGE |
| 25 | ; ARM64: add x1, x8, _message@PAGEOFF |
| Tim Northover | daa1c01 | 2016-06-16 01:42:25 +0000 | [diff] [blame] | 26 | ; ARM64: mov x2, #80 |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 27 | ; ARM64: bl _memcpy |
| Daniel Neilson | 1e68724 | 2018-01-19 17:13:12 +0000 | [diff] [blame] | 28 | call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 16 getelementptr inbounds ([80 x i8], [80 x i8]* @temp, i32 0, i32 0), i8* align 16 getelementptr inbounds ([80 x i8], [80 x i8]* @message, i32 0, i32 0), i64 80, i1 false) |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 29 | ret void |
| 30 | } |
| 31 | |
| Daniel Neilson | 1e68724 | 2018-01-19 17:13:12 +0000 | [diff] [blame] | 32 | declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i1) |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 33 | |
| 34 | define void @t3() { |
| Tim Northover | 970c4a8 | 2014-04-30 11:19:40 +0000 | [diff] [blame] | 35 | ; ARM64-LABEL: t3 |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 36 | ; ARM64: adrp x8, _temp@GOTPAGE |
| 37 | ; ARM64: ldr x0, [x8, _temp@GOTPAGEOFF] |
| 38 | ; ARM64: adrp x8, _message@PAGE |
| 39 | ; ARM64: add x1, x8, _message@PAGEOFF |
| Tim Northover | daa1c01 | 2016-06-16 01:42:25 +0000 | [diff] [blame] | 40 | ; ARM64: mov x2, #20 |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 41 | ; ARM64: bl _memmove |
| Daniel Neilson | 1e68724 | 2018-01-19 17:13:12 +0000 | [diff] [blame] | 42 | call void @llvm.memmove.p0i8.p0i8.i64(i8* align 16 getelementptr inbounds ([80 x i8], [80 x i8]* @temp, i32 0, i32 0), i8* align 16 getelementptr inbounds ([80 x i8], [80 x i8]* @message, i32 0, i32 0), i64 20, i1 false) |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 43 | ret void |
| 44 | } |
| 45 | |
| Daniel Neilson | 1e68724 | 2018-01-19 17:13:12 +0000 | [diff] [blame] | 46 | declare void @llvm.memmove.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i1) |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 47 | |
| 48 | define void @t4() { |
| Tim Northover | 970c4a8 | 2014-04-30 11:19:40 +0000 | [diff] [blame] | 49 | ; ARM64-LABEL: t4 |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 50 | ; ARM64: adrp x8, _temp@GOTPAGE |
| 51 | ; ARM64: ldr x8, [x8, _temp@GOTPAGEOFF] |
| 52 | ; ARM64: adrp x9, _message@PAGE |
| 53 | ; ARM64: add x9, x9, _message@PAGEOFF |
| 54 | ; ARM64: ldr x10, [x9] |
| 55 | ; ARM64: str x10, [x8] |
| 56 | ; ARM64: ldr x10, [x9, #8] |
| 57 | ; ARM64: str x10, [x8, #8] |
| 58 | ; ARM64: ldrb w11, [x9, #16] |
| 59 | ; ARM64: strb w11, [x8, #16] |
| 60 | ; ARM64: ret |
| Daniel Neilson | 1e68724 | 2018-01-19 17:13:12 +0000 | [diff] [blame] | 61 | call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 16 getelementptr inbounds ([80 x i8], [80 x i8]* @temp, i32 0, i32 0), i8* align 16 getelementptr inbounds ([80 x i8], [80 x i8]* @message, i32 0, i32 0), i64 17, i1 false) |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 62 | ret void |
| 63 | } |
| 64 | |
| 65 | define void @t5() { |
| Tim Northover | 970c4a8 | 2014-04-30 11:19:40 +0000 | [diff] [blame] | 66 | ; ARM64-LABEL: t5 |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 67 | ; ARM64: adrp x8, _temp@GOTPAGE |
| 68 | ; ARM64: ldr x8, [x8, _temp@GOTPAGEOFF] |
| 69 | ; ARM64: adrp x9, _message@PAGE |
| 70 | ; ARM64: add x9, x9, _message@PAGEOFF |
| 71 | ; ARM64: ldr x10, [x9] |
| 72 | ; ARM64: str x10, [x8] |
| 73 | ; ARM64: ldr x10, [x9, #8] |
| 74 | ; ARM64: str x10, [x8, #8] |
| 75 | ; ARM64: ldrb w11, [x9, #16] |
| 76 | ; ARM64: strb w11, [x8, #16] |
| 77 | ; ARM64: ret |
| Daniel Neilson | 1e68724 | 2018-01-19 17:13:12 +0000 | [diff] [blame] | 78 | call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 getelementptr inbounds ([80 x i8], [80 x i8]* @temp, i32 0, i32 0), i8* align 8 getelementptr inbounds ([80 x i8], [80 x i8]* @message, i32 0, i32 0), i64 17, i1 false) |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 79 | ret void |
| 80 | } |
| 81 | |
| 82 | define void @t6() { |
| Tim Northover | 970c4a8 | 2014-04-30 11:19:40 +0000 | [diff] [blame] | 83 | ; ARM64-LABEL: t6 |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 84 | ; ARM64: adrp x8, _temp@GOTPAGE |
| 85 | ; ARM64: ldr x8, [x8, _temp@GOTPAGEOFF] |
| 86 | ; ARM64: adrp x9, _message@PAGE |
| 87 | ; ARM64: add x9, x9, _message@PAGEOFF |
| 88 | ; ARM64: ldr w10, [x9] |
| 89 | ; ARM64: str w10, [x8] |
| 90 | ; ARM64: ldr w10, [x9, #4] |
| 91 | ; ARM64: str w10, [x8, #4] |
| 92 | ; ARM64: ldrb w10, [x9, #8] |
| 93 | ; ARM64: strb w10, [x8, #8] |
| 94 | ; ARM64: ret |
| Daniel Neilson | 1e68724 | 2018-01-19 17:13:12 +0000 | [diff] [blame] | 95 | call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 getelementptr inbounds ([80 x i8], [80 x i8]* @temp, i32 0, i32 0), i8* align 4 getelementptr inbounds ([80 x i8], [80 x i8]* @message, i32 0, i32 0), i64 9, i1 false) |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 96 | ret void |
| 97 | } |
| 98 | |
| 99 | define void @t7() { |
| Tim Northover | 970c4a8 | 2014-04-30 11:19:40 +0000 | [diff] [blame] | 100 | ; ARM64-LABEL: t7 |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 101 | ; ARM64: adrp x8, _temp@GOTPAGE |
| 102 | ; ARM64: ldr x8, [x8, _temp@GOTPAGEOFF] |
| 103 | ; ARM64: adrp x9, _message@PAGE |
| 104 | ; ARM64: add x9, x9, _message@PAGEOFF |
| 105 | ; ARM64: ldrh w10, [x9] |
| 106 | ; ARM64: strh w10, [x8] |
| 107 | ; ARM64: ldrh w10, [x9, #2] |
| 108 | ; ARM64: strh w10, [x8, #2] |
| 109 | ; ARM64: ldrh w10, [x9, #4] |
| 110 | ; ARM64: strh w10, [x8, #4] |
| 111 | ; ARM64: ldrb w10, [x9, #6] |
| 112 | ; ARM64: strb w10, [x8, #6] |
| 113 | ; ARM64: ret |
| Daniel Neilson | 1e68724 | 2018-01-19 17:13:12 +0000 | [diff] [blame] | 114 | call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 2 getelementptr inbounds ([80 x i8], [80 x i8]* @temp, i32 0, i32 0), i8* align 2 getelementptr inbounds ([80 x i8], [80 x i8]* @message, i32 0, i32 0), i64 7, i1 false) |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 115 | ret void |
| 116 | } |
| 117 | |
| 118 | define void @t8() { |
| Tim Northover | 970c4a8 | 2014-04-30 11:19:40 +0000 | [diff] [blame] | 119 | ; ARM64-LABEL: t8 |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 120 | ; ARM64: adrp x8, _temp@GOTPAGE |
| 121 | ; ARM64: ldr x8, [x8, _temp@GOTPAGEOFF] |
| 122 | ; ARM64: adrp x9, _message@PAGE |
| 123 | ; ARM64: add x9, x9, _message@PAGEOFF |
| 124 | ; ARM64: ldrb w10, [x9] |
| 125 | ; ARM64: strb w10, [x8] |
| 126 | ; ARM64: ldrb w10, [x9, #1] |
| 127 | ; ARM64: strb w10, [x8, #1] |
| 128 | ; ARM64: ldrb w10, [x9, #2] |
| 129 | ; ARM64: strb w10, [x8, #2] |
| 130 | ; ARM64: ldrb w10, [x9, #3] |
| 131 | ; ARM64: strb w10, [x8, #3] |
| 132 | ; ARM64: ret |
| Daniel Neilson | 1e68724 | 2018-01-19 17:13:12 +0000 | [diff] [blame] | 133 | call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 getelementptr inbounds ([80 x i8], [80 x i8]* @temp, i32 0, i32 0), i8* align 1 getelementptr inbounds ([80 x i8], [80 x i8]* @message, i32 0, i32 0), i64 4, i1 false) |
| Tim Northover | 00ed996 | 2014-03-29 10:18:08 +0000 | [diff] [blame] | 134 | ret void |
| 135 | } |
| Tim Northover | c19445d | 2014-06-10 09:52:40 +0000 | [diff] [blame] | 136 | |
| 137 | define void @test_distant_memcpy(i8* %dst) { |
| 138 | ; ARM64-LABEL: test_distant_memcpy: |
| Tim Northover | c141ad4 | 2014-06-10 09:52:44 +0000 | [diff] [blame] | 139 | ; ARM64: mov [[ARRAY:x[0-9]+]], sp |
| Tim Northover | daa1c01 | 2016-06-16 01:42:25 +0000 | [diff] [blame] | 140 | ; ARM64: mov [[OFFSET:x[0-9]+]], #8000 |
| Tim Northover | c141ad4 | 2014-06-10 09:52:44 +0000 | [diff] [blame] | 141 | ; ARM64: add x[[ADDR:[0-9]+]], [[ARRAY]], [[OFFSET]] |
| 142 | ; ARM64: ldrb [[BYTE:w[0-9]+]], [x[[ADDR]]] |
| 143 | ; ARM64: strb [[BYTE]], [x0] |
| Tim Northover | c19445d | 2014-06-10 09:52:40 +0000 | [diff] [blame] | 144 | %array = alloca i8, i32 8192 |
| David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 145 | %elem = getelementptr i8, i8* %array, i32 8000 |
| Daniel Neilson | 1e68724 | 2018-01-19 17:13:12 +0000 | [diff] [blame] | 146 | call void @llvm.memcpy.p0i8.p0i8.i64(i8* %dst, i8* %elem, i64 1, i1 false) |
| Tim Northover | c19445d | 2014-06-10 09:52:40 +0000 | [diff] [blame] | 147 | ret void |
| 148 | } |