| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
| ; RUN: llc < %s -mtriple=aarch64-unknown-linux-gnu | FileCheck %s |
| |
| declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i1) nounwind |
| declare void @llvm.memset.inline.p0i8.i64(i8* nocapture, i8, i64, i1) nounwind |
| |
| define void @test1(i8* %a, i8 %value) nounwind { |
| ; CHECK-LABEL: test1: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: // kill: def $w1 killed $w1 def $x1 |
| ; CHECK-NEXT: mov x8, #72340172838076673 |
| ; CHECK-NEXT: and x9, x1, #0xff |
| ; CHECK-NEXT: mul x8, x9, x8 |
| ; CHECK-NEXT: str x8, [x0] |
| ; CHECK-NEXT: ret |
| tail call void @llvm.memset.inline.p0i8.i64(i8* %a, i8 %value, i64 8, i1 0) |
| ret void |
| } |
| |
| define void @regular_memset_calls_external_function(i8* %a, i8 %value) nounwind { |
| ; CHECK-LABEL: regular_memset_calls_external_function: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: mov w2, #1024 |
| ; CHECK-NEXT: b memset |
| tail call void @llvm.memset.p0i8.i64(i8* %a, i8 %value, i64 1024, i1 0) |
| ret void |
| } |
| |
| define void @inlined_set_doesnt_call_external_function(i8* %a, i8 %value) nounwind { |
| ; CHECK-LABEL: inlined_set_doesnt_call_external_function: |
| ; CHECK: // %bb.0: |
| ; CHECK-NEXT: dup v0.16b, w1 |
| ; CHECK-NEXT: stp q0, q0, [x0] |
| ; CHECK-NEXT: stp q0, q0, [x0, #32] |
| tail call void @llvm.memset.inline.p0i8.i64(i8* %a, i8 %value, i64 1024, i1 0) |
| ret void |
| } |