// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
// REQUIRES: x86-registered-target
// RUN: %clang_cc1 -triple x86_64-unknown-linux -emit-llvm %s -o - | FileCheck %s

// CHECK-LABEL: define{{.*}} void @test_memset_inline_0(ptr noundef %dst, i8 noundef signext %value)
void test_memset_inline_0(void *dst, char value) {
  // CHECK:    call void @llvm.memset.inline.p0.i64(ptr align 1 %0, i8 %2, i64 0, i1 false)
  __builtin_memset_inline(dst, value, 0);
}

// CHECK-LABEL: define{{.*}} void @test_memset_inline_1(ptr noundef %dst, i8 noundef signext %value)
void test_memset_inline_1(void *dst, char value) {
  // CHECK:    call void @llvm.memset.inline.p0.i64(ptr align 1 %0, i8 %2, i64 1, i1 false)
  __builtin_memset_inline(dst, value, 1);
}

// CHECK-LABEL: define{{.*}} void @test_memset_inline_4(ptr noundef %dst, i8 noundef signext %value)
void test_memset_inline_4(void *dst, char value) {
  // CHECK:    call void @llvm.memset.inline.p0.i64(ptr align 1 %0, i8 %2, i64 4, i1 false)
  __builtin_memset_inline(dst, value, 4);
}
