#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
typedef int /*<<< orphan*/ __m128i;

/* Variables and functions */
int /*<<< orphan*/ _mm_setr_epi8(char, char, char, char, char, char, char, char,
                                 char, char, char, char, char, char, char,
                                 char);
__m128i test_mm_setr_epi8(char A, char B, char C, char D, char E, char F,
                          char G, char H, char I, char J, char K, char L,
                          char M, char N, char O, char P) {
  return _mm_setr_epi8(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P);
}


x86 assembly (clang, -O0):
<test_mm_setr_epi8>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x68,%rsp
mov    %r8d,-0x40(%rbp)
mov    %ecx,%eax
mov    -0x40(%rbp),%ecx
mov    %eax,-0x3c(%rbp)
mov    %edx,%eax
mov    -0x3c(%rbp),%edx
mov    %eax,-0x38(%rbp)
mov    %esi,%eax
mov    -0x38(%rbp),%esi
mov    %eax,-0x34(%rbp)
mov    %edi,%r8d
mov    -0x34(%rbp),%edi
mov    %r9b,%al
mov    0x58(%rbp),%r9b
mov    0x50(%rbp),%r9b
mov    0x48(%rbp),%r9b
mov    0x40(%rbp),%r9b
mov    0x38(%rbp),%r9b
mov    0x30(%rbp),%r9b
mov    0x28(%rbp),%r9b
mov    0x20(%rbp),%r9b
mov    0x18(%rbp),%r9b
mov    0x10(%rbp),%r9b
mov    %r8b,-0x29(%rbp)
mov    %dil,-0x2a(%rbp)
mov    %sil,-0x2b(%rbp)
mov    %dl,-0x2c(%rbp)
mov    %cl,-0x2d(%rbp)
mov    %al,-0x2e(%rbp)
mov    -0x29(%rbp),%dil
mov    -0x2a(%rbp),%sil
mov    -0x2b(%rbp),%dl
mov    -0x2c(%rbp),%cl
mov    -0x2d(%rbp),%r8b
mov    -0x2e(%rbp),%r9b
mov    0x10(%rbp),%al
mov    %al,-0x30(%rbp)
mov    0x18(%rbp),%r13b
mov    0x20(%rbp),%r12b
mov    0x28(%rbp),%r15b
mov    0x30(%rbp),%r14b
mov    0x38(%rbp),%bl
mov    0x40(%rbp),%r11b
mov    0x48(%rbp),%r10b
mov    0x50(%rbp),%al
mov    %al,-0x2f(%rbp)
mov    -0x30(%rbp),%al
movsbl %dil,%edi
movsbl %sil,%esi
movsbl %dl,%edx
movsbl %cl,%ecx
movsbl %r8b,%r8d
movsbl %r9b,%r9d
movsbl %al,%eax
mov    %eax,(%rsp)
mov    -0x2f(%rbp),%al
movsbl %r13b,%r13d
mov    %r13d,0x8(%rsp)
movsbl %r12b,%r12d
mov    %r12d,0x10(%rsp)
movsbl %r15b,%r15d
mov    %r15d,0x18(%rsp)
movsbl %r14b,%r14d
mov    %r14d,0x20(%rsp)
movsbl %bl,%ebx
mov    %ebx,0x28(%rsp)
movsbl %r11b,%r11d
mov    %r11d,0x30(%rsp)
movsbl %r10b,%r10d
mov    %r10d,0x38(%rsp)
movsbl %al,%eax
mov    %eax,0x40(%rsp)
movsbl 0x58(%rbp),%eax
mov    %eax,0x48(%rsp)
call   1030 <_mm_setr_epi8@plt>
add    $0x68,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<test_mm_setr_epi8>:
jmp    1030 <_mm_setr_epi8@plt>

LLVM IR (-O0):
define i32 @test_mm_setr_epi8(i8 signext %0, i8 signext %1, i8 signext %2, i8 signext %3, i8 signext %4, i8 signext %5, i8 signext %6, i8 signext %7, i8 signext %8, i8 signext %9, i8 signext %10, i8 signext %11, i8 signext %12, i8 signext %13, i8 signext %14, i8 signext %15) {
%17 = alloca i8
%18 = alloca i8
%19 = alloca i8
%20 = alloca i8
%21 = alloca i8
%22 = alloca i8
%23 = alloca i8
%24 = alloca i8
%25 = alloca i8
%26 = alloca i8
%27 = alloca i8
%28 = alloca i8
%29 = alloca i8
%30 = alloca i8
%31 = alloca i8
%32 = alloca i8
store i8 %0, i8* %17
store i8 %1, i8* %18
store i8 %2, i8* %19
store i8 %3, i8* %20
store i8 %4, i8* %21
store i8 %5, i8* %22
store i8 %6, i8* %23
store i8 %7, i8* %24
store i8 %8, i8* %25
store i8 %9, i8* %26
store i8 %10, i8* %27
store i8 %11, i8* %28
store i8 %12, i8* %29
store i8 %13, i8* %30
store i8 %14, i8* %31
store i8 %15, i8* %32
%33 = load i8, i8* %17
%34 = load i8, i8* %18
%35 = load i8, i8* %19
%36 = load i8, i8* %20
%37 = load i8, i8* %21
%38 = load i8, i8* %22
%39 = load i8, i8* %23
%40 = load i8, i8* %24
%41 = load i8, i8* %25
%42 = load i8, i8* %26
%43 = load i8, i8* %27
%44 = load i8, i8* %28
%45 = load i8, i8* %29
%46 = load i8, i8* %30
%47 = load i8, i8* %31
%48 = load i8, i8* %32
%49 = call i32 @_mm_setr_epi8(i8 signext %33, i8 signext %34, i8 signext %35, i8 signext %36, i8 signext %37, i8 signext %38, i8 signext %39, i8 signext %40, i8 signext %41, i8 signext %42, i8 signext %43, i8 signext %44, i8 signext %45, i8 signext %46, i8 signext %47, i8 signext %48)
ret i32 %49
}

LLVM IR (-O2):
define i32 @test_mm_setr_epi8(i8 signext %0, i8 signext %1, i8 signext %2, i8 signext %3, i8 signext %4, i8 signext %5, i8 signext %6, i8 signext %7, i8 signext %8, i8 signext %9, i8 signext %10, i8 signext %11, i8 signext %12, i8 signext %13, i8 signext %14, i8 signext %15) {
%17 = tail call i32 @_mm_setr_epi8(i8 signext %0, i8 signext %1, i8 signext %2, i8 signext %3, i8 signext %4, i8 signext %5, i8 signext %6, i8 signext %7, i8 signext %8, i8 signext %9, i8 signext %10, i8 signext %11, i8 signext %12, i8 signext %13, i8 signext %14, i8 signext %15)
ret i32 %17
}