| OLD | NEW |
| (Empty) |
| 1 ; RUN: llc < %s | FileCheck %s | |
| 2 | |
| 3 ; llc should emit small aligned memcpy and memset inline. | |
| 4 | |
| 5 target datalayout = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64
:64:64-p:32:32:32-v128:32:128-n32-S128" | |
| 6 target triple = "asmjs-unknown-emscripten" | |
| 7 | |
| 8 ; CHECK: test_unrolled_memcpy | |
| 9 ; CHECK: HEAP32[$d+0>>2]=HEAP32[$s+0>>2]|0;HEAP32[$d+4>>2]=HEAP32[$s+4>>2]|0;HEA
P32[$d+8>>2]=HEAP32[$s+8>>2]|0;HEAP32[$d+12>>2]=HEAP32[$s+12>>2]|0;HEAP32[$d+16>
>2]=HEAP32[$s+16>>2]|0;HEAP32[$d+20>>2]=HEAP32[$s+20>>2]|0;HEAP32[$d+24>>2]=HEAP
32[$s+24>>2]|0;HEAP32[$d+28>>2]=HEAP32[$s+28>>2]|0; | |
| 10 define void @test_unrolled_memcpy(i8* %d, i8* %s) { | |
| 11 call void @llvm.memcpy.p0i8.p0i8.i32(i8* %d, i8* %s, i32 32, i32 4, i1 false) | |
| 12 ret void | |
| 13 } | |
| 14 | |
| 15 ; CHECK: test_loop_memcpy | |
| 16 ; CHECK: dest=$d+0|0; src=$s+0|0; stop=dest+64|0; do { HEAP32[dest>>2]=HEAP32[sr
c>>2]|0; dest=dest+4|0; src=src+4|0; } while ((dest|0) < (stop|0)) | |
| 17 define void @test_loop_memcpy(i8* %d, i8* %s) { | |
| 18 call void @llvm.memcpy.p0i8.p0i8.i32(i8* %d, i8* %s, i32 64, i32 4, i1 false) | |
| 19 ret void | |
| 20 } | |
| 21 | |
| 22 ; CHECK: test_call_memcpy | |
| 23 ; CHECK: memcpy(($d|0),($s|0),65536) | |
| 24 define void @test_call_memcpy(i8* %d, i8* %s) { | |
| 25 call void @llvm.memcpy.p0i8.p0i8.i32(i8* %d, i8* %s, i32 65536, i32 4, i1 fals
e) | |
| 26 ret void | |
| 27 } | |
| 28 | |
| 29 ; CHECK: test_unrolled_memset | |
| 30 ; CHECK: HEAP32[$d+0>>2]=0|0;HEAP32[$d+4>>2]=0|0;HEAP32[$d+8>>2]=0|0;HEAP32[$d+
12>>2]=0|0;HEAP32[$d+16>>2]=0|0;HEAP32[$d+20>>2]=0|0;HEAP32[$d+24>>2]=0|0;HEAP32
[$d+28>>2]=0|0; | |
| 31 define void @test_unrolled_memset(i8* %d, i8* %s) { | |
| 32 call void @llvm.memset.p0i8.i32(i8* %d, i8 0, i32 32, i32 4, i1 false) | |
| 33 ret void | |
| 34 } | |
| 35 | |
| 36 ; CHECK: test_loop_memset | |
| 37 ; CHECK: dest=$d+0|0; stop=dest+64|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; }
while ((dest|0) < (stop|0)); | |
| 38 define void @test_loop_memset(i8* %d, i8* %s) { | |
| 39 call void @llvm.memset.p0i8.i32(i8* %d, i8 0, i32 64, i32 4, i1 false) | |
| 40 ret void | |
| 41 } | |
| 42 | |
| 43 ; CHECK: test_call_memset | |
| 44 ; CHECK: memset(($d|0),0,65536) | |
| 45 define void @test_call_memset(i8* %d, i8* %s) { | |
| 46 call void @llvm.memset.p0i8.i32(i8* %d, i8 0, i32 65536, i32 4, i1 false) | |
| 47 ret void | |
| 48 } | |
| 49 | |
| 50 ; Also, don't emit declarations for the intrinsic functions. | |
| 51 ; CHECK-NOT: p0i8 | |
| 52 | |
| 53 declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32,
i1) #0 | |
| 54 declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) #0 | |
| 55 | |
| 56 attributes #0 = { nounwind } | |
| OLD | NEW |