void verifyfeaturestrings() {
  (void)__builtin_cpu_supports("cmov");
  (void)__builtin_cpu_supports("mmx");
  (void)__builtin_cpu_supports("popcnt");
  (void)__builtin_cpu_supports("sse");
  (void)__builtin_cpu_supports("sse2");
  (void)__builtin_cpu_supports("sse3");
  (void)__builtin_cpu_supports("ssse3");
  (void)__builtin_cpu_supports("sse4.1");
  (void)__builtin_cpu_supports("sse4.2");
  (void)__builtin_cpu_supports("avx");
  (void)__builtin_cpu_supports("avx2");
  (void)__builtin_cpu_supports("sse4a");
  (void)__builtin_cpu_supports("fma4");
  (void)__builtin_cpu_supports("xop");
  (void)__builtin_cpu_supports("fma");
  (void)__builtin_cpu_supports("avx512f");
  (void)__builtin_cpu_supports("bmi");
  (void)__builtin_cpu_supports("bmi2");
  (void)__builtin_cpu_supports("aes");
  (void)__builtin_cpu_supports("pclmul");
  (void)__builtin_cpu_supports("avx512vl");
  (void)__builtin_cpu_supports("avx512bw");
  (void)__builtin_cpu_supports("avx512dq");
  (void)__builtin_cpu_supports("avx512cd");
  (void)__builtin_cpu_supports("avx512er");
  (void)__builtin_cpu_supports("avx512pf");
  (void)__builtin_cpu_supports("avx512vbmi");
  (void)__builtin_cpu_supports("avx512ifma");
}


x86 assembly (clang, -O0):
<verifyfeaturestrings>:
push   %rbp
mov    %rsp,%rbp
pop    %rbp
ret

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

LLVM IR (-O0):
@__cpu_model = external global { i32, i32, i32, [1 x i32] }
define void @verifyfeaturestrings() {
%1 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%2 = and i32 %1, 1
%3 = icmp eq i32 %2, 1
%4 = and i1 true, %3
%5 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%6 = and i32 %5, 2
%7 = icmp eq i32 %6, 2
%8 = and i1 true, %7
%9 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%10 = and i32 %9, 4
%11 = icmp eq i32 %10, 4
%12 = and i1 true, %11
%13 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%14 = and i32 %13, 8
%15 = icmp eq i32 %14, 8
%16 = and i1 true, %15
%17 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%18 = and i32 %17, 16
%19 = icmp eq i32 %18, 16
%20 = and i1 true, %19
%21 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%22 = and i32 %21, 32
%23 = icmp eq i32 %22, 32
%24 = and i1 true, %23
%25 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%26 = and i32 %25, 64
%27 = icmp eq i32 %26, 64
%28 = and i1 true, %27
%29 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%30 = and i32 %29, 128
%31 = icmp eq i32 %30, 128
%32 = and i1 true, %31
%33 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%34 = and i32 %33, 256
%35 = icmp eq i32 %34, 256
%36 = and i1 true, %35
%37 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%38 = and i32 %37, 512
%39 = icmp eq i32 %38, 512
%40 = and i1 true, %39
%41 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%42 = and i32 %41, 1024
%43 = icmp eq i32 %42, 1024
%44 = and i1 true, %43
%45 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%46 = and i32 %45, 2048
%47 = icmp eq i32 %46, 2048
%48 = and i1 true, %47
%49 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%50 = and i32 %49, 4096
%51 = icmp eq i32 %50, 4096
%52 = and i1 true, %51
%53 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%54 = and i32 %53, 8192
%55 = icmp eq i32 %54, 8192
%56 = and i1 true, %55
%57 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%58 = and i32 %57, 16384
%59 = icmp eq i32 %58, 16384
%60 = and i1 true, %59
%61 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%62 = and i32 %61, 32768
%63 = icmp eq i32 %62, 32768
%64 = and i1 true, %63
%65 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%66 = and i32 %65, 65536
%67 = icmp eq i32 %66, 65536
%68 = and i1 true, %67
%69 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%70 = and i32 %69, 131072
%71 = icmp eq i32 %70, 131072
%72 = and i1 true, %71
%73 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%74 = and i32 %73, 262144
%75 = icmp eq i32 %74, 262144
%76 = and i1 true, %75
%77 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%78 = and i32 %77, 524288
%79 = icmp eq i32 %78, 524288
%80 = and i1 true, %79
%81 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%82 = and i32 %81, 1048576
%83 = icmp eq i32 %82, 1048576
%84 = and i1 true, %83
%85 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%86 = and i32 %85, 2097152
%87 = icmp eq i32 %86, 2097152
%88 = and i1 true, %87
%89 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%90 = and i32 %89, 4194304
%91 = icmp eq i32 %90, 4194304
%92 = and i1 true, %91
%93 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%94 = and i32 %93, 8388608
%95 = icmp eq i32 %94, 8388608
%96 = and i1 true, %95
%97 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%98 = and i32 %97, 16777216
%99 = icmp eq i32 %98, 16777216
%100 = and i1 true, %99
%101 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%102 = and i32 %101, 33554432
%103 = icmp eq i32 %102, 33554432
%104 = and i1 true, %103
%105 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%106 = and i32 %105, 67108864
%107 = icmp eq i32 %106, 67108864
%108 = and i1 true, %107
%109 = load i32, i32* getelementptr inbounds ({ i32, i32, i32, [1 x i32] }, { i32, i32, i32, [1 x i32] }* @__cpu_model, i32 0, i32 3, i32 0)
%110 = and i32 %109, 134217728
%111 = icmp eq i32 %110, 134217728
%112 = and i1 true, %111
ret void
}

LLVM IR (-O2):
define void @verifyfeaturestrings() {
ret void
}