void f3(void ***bar) {
  const void *p1 = (const void *)bar;
  const char *p2 = (const char *)bar;
  const void **p3 = (const void **)bar;
  const char **p4 = (const char **)bar;
  const void *const *p5 = (const void *const *)bar;
  const char *const *p6 = (const char *const *)bar;
  void *const *p7 = (void *const *)bar;
  char *const *p8 = (char *const *)bar;
  const void ***p9 = (const void ***)bar;
  const char ***p10 = (const char ***)bar;
  void *const **p11 = (void *const **)bar;
  char *const **p12 = (char *const **)bar;
  void **const *p13 = (void **const *)bar;
  char **const *p14 = (char **const *)bar;
  const void *const **p15 = (const void *const **)bar;
  const char *const **p16 = (const char *const **)bar;
  const void **const *p17 = (const void **const *)bar;
  const char **const *p18 = (const char **const *)bar;
  void *const *const *p19 = (void *const *const *)bar;
  char *const *const *p20 = (char *const *const *)bar;
  const void *const *const *p21 = (const void *const *const *)bar;
  const char *const *const *p22 = (const char *const *const *)bar;
}


x86 assembly (clang, -O0):
<f3>:
push   %rbp
mov    %rsp,%rbp
sub    $0x38,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x68(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x78(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x80(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x88(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x90(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x98(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0xa0(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0xa8(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0xb0(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0xb8(%rbp)
add    $0x38,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<f3>:
ret

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

LLVM IR (-O2):
define void @f3(i8*** nocapture %0) {
ret void
}