// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +lwp -emit-llvm -o - -Wall -Werror | FileCheck %s

#include <x86intrin.h>

void test_llwpcb(void *ptr) {
  // CHECK-LABEL: @test_llwpcb
  // CHECK: call void @llvm.x86.llwpcb(i8* %{{.*}})
  __llwpcb(ptr);
}

void* test_slwpcb() {
  // CHECK-LABEL: @test_slwpcb
  // CHECK: call i8* @llvm.x86.slwpcb()
  return __slwpcb();
}

unsigned char test_lwpins32(unsigned val2, unsigned val1) {
  // CHECK-LABEL: @test_lwpins32
  // CHECK: call i8 @llvm.x86.lwpins32(i32
  return __lwpins32(val2, val1, 0x01234);
}

unsigned char test_lwpins64(unsigned long long val2, unsigned val1) {
  // CHECK-LABEL: @test_lwpins64
  // CHECK: call i8 @llvm.x86.lwpins64(i64
  return __lwpins64(val2, val1, 0x56789);
}

void test_lwpval32(unsigned val2, unsigned val1) {
  // CHECK-LABEL: @test_lwpval32
  // CHECK: call void @llvm.x86.lwpval32(i32
  __lwpval32(val2, val1, 0x01234);
}

void test_lwpval64(unsigned long long val2, unsigned val1) {
  // CHECK-LABEL: @test_lwpval64
  // CHECK: call void @llvm.x86.lwpval64(i64
  __lwpval64(val2, val1, 0xABCDEF);
}
