[RISCV] Simplify MIPS CCMov patterns. NFC (#125318)
[llvm-project.git] / clang / test / Preprocessor / embed_codegen.cpp
blob4f2b5f263985a35023070a6621d8099404ea2232
1 // RUN: %clang_cc1 %s -triple x86_64 --embed-dir=%S/Inputs -emit-llvm -o - | FileCheck %s
3 // CHECK: @__const._Z3fooi.ca = private unnamed_addr constant [3 x i32] [i32 0, i32 106, i32 107], align 4
4 // CHECK: @__const._Z3fooi.sc = private unnamed_addr constant %struct.S1 { i32 106, i32 107, i32 0 }, align 4
5 // CHECK: @__const._Z3fooi.t = private unnamed_addr constant [3 x %struct.T] [%struct.T { [2 x i32] [i32 48, i32 49], %struct.S1 { i32 50, i32 51, i32 52 } }, %struct.T { [2 x i32] [i32 53, i32 54], %struct.S1 { i32 55, i32 56, i32 57 } }, %struct.T { [2 x i32] [i32 10, i32 0], %struct.S1 zeroinitializer }], align 16
6 // CHECK: @__const._Z3fooi.W = private unnamed_addr constant %struct.Wrapper { i32 48, %struct.HasCharArray { [10 x i8] c"123456789\0A" } }, align 4
7 void foo(int a) {
8 // CHECK: %a.addr = alloca i32, align 4
9 // CHECK: store i32 %a, ptr %a.addr, align 4
10 // CHECK: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %ca, ptr align 4 @__const._Z3fooi.ca, i64 12, i1 false)
11 int ca[] = {
13 #embed <jk.txt> prefix(,)
16 // CHECK: %arrayinit.element = getelementptr inbounds i32, ptr %notca, i64 1
17 // CHECK: store i32 106, ptr %arrayinit.element, align 4
18 // CHECK: %arrayinit.element1 = getelementptr inbounds i32, ptr %notca, i64 2
19 // CHECK: store i32 107, ptr %arrayinit.element1, align 4
20 int notca[] = {
22 #embed <jk.txt> prefix(,)
25 struct S1 {
26 int x, y, z;
29 // CHECK: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %sc, ptr align 4 @__const._Z3fooi.sc, i64 12, i1 false)
30 S1 sc = {
31 #embed <jk.txt> suffix(,)
35 // CHECK: %x = getelementptr inbounds nuw %struct.S1, ptr %s, i32 0, i32 0
36 // CHECK: store i32 106, ptr %x, align 4
37 // CHECK: %y = getelementptr inbounds nuw %struct.S1, ptr %s, i32 0, i32 1
38 // CHECK: store i32 107, ptr %y, align 4
39 // CHECK: %z = getelementptr inbounds nuw %struct.S1, ptr %s, i32 0, i32 2
40 // CHECK: %1 = load i32, ptr %a.addr, align 4
41 S1 s = {
42 #embed <jk.txt> suffix(,)
46 // CHECK: store i32 107, ptr %b, align 4
47 int b = (
48 #embed<jk.txt>
53 struct T {
54 int arr[2];
55 struct S1 s;
58 // CHECK: call void @llvm.memcpy.p0.p0.i64(ptr align 16 %t, ptr align 16 @__const._Z3fooi.t, i64 60, i1 false)
59 constexpr struct T t[] = {
60 #embed <numbers.txt>
63 // CHECK: %arr = getelementptr inbounds nuw %struct.T, ptr %tnonc, i32 0, i32 0
64 // CHECK: %2 = load i32, ptr %a.addr, align 4
65 // CHECK: store i32 %2, ptr %arr, align 4
66 // CHECK: %arrayinit.element2 = getelementptr inbounds i32, ptr %arr, i64 1
67 // CHECK: store i32 300, ptr %arrayinit.element2, align 4
68 // CHECK: %s3 = getelementptr inbounds nuw %struct.T, ptr %tnonc, i32 0, i32 1
69 // CHECK: %x4 = getelementptr inbounds nuw %struct.S1, ptr %s3, i32 0, i32 0
70 // CHECK: store i32 1, ptr %x4, align 4
71 // CHECK: %y5 = getelementptr inbounds nuw %struct.S1, ptr %s3, i32 0, i32 1
72 // CHECK: store i32 2, ptr %y5, align 4
73 // CHECK: %z6 = getelementptr inbounds nuw %struct.S1, ptr %s3, i32 0, i32 2
74 // CHECK: store i32 3, ptr %z6, align 4
75 // CHECK: %arrayinit.element7 = getelementptr inbounds %struct.T, ptr %tnonc, i64 1
76 // CHECK: call void @llvm.memset.p0.i64(ptr align 4 %arrayinit.element7, i8 0, i64 20, i1 false)
77 // CHECK: %arr8 = getelementptr inbounds nuw %struct.T, ptr %arrayinit.element7, i32 0, i32 0
78 // CHECK: store i32 106, ptr %arr8, align 4
79 // CHECK: %arrayinit.element9 = getelementptr inbounds i32, ptr %arr8, i64 1
80 // CHECK: store i32 107, ptr %arrayinit.element9, align 4
81 struct T tnonc[] = {
82 a, 300, 1, 2, 3
83 #embed <jk.txt> prefix(,)
87 struct HasCharArray { unsigned char h[10]; };
88 struct Wrapper { int a; struct HasCharArray d; };
89 constexpr struct Wrapper W = {
90 #embed "numbers.txt"