1; Test if we can read alloca instructions. 2 3; RUN: %p2i -i %s --insts | FileCheck %s 4; RUN: %p2i -i %s --args -notranslate -timing | \ 5; RUN: FileCheck --check-prefix=NOIR %s 6 7; Show examples where size is defined by a constant. 8 9define internal i32 @AllocaA0Size1() { 10entry: 11 %array = alloca i8, i32 1 12 %addr = ptrtoint i8* %array to i32 13 ret i32 %addr 14 15; CHECK: entry: 16; CHECK-NEXT: %array = alloca i8, i32 1 17; CHECK-NEXT: ret i32 %array 18} 19 20define internal i32 @AllocaA0Size2() { 21entry: 22 %array = alloca i8, i32 2 23 %addr = ptrtoint i8* %array to i32 24 ret i32 %addr 25 26; CHECK: entry: 27; CHECK-NEXT: %array = alloca i8, i32 2 28; CHECK-NEXT: ret i32 %array 29} 30 31define internal i32 @AllocaA0Size3() { 32entry: 33 %array = alloca i8, i32 3 34 %addr = ptrtoint i8* %array to i32 35 ret i32 %addr 36 37; CHECK: entry: 38; CHECK-NEXT: %array = alloca i8, i32 3 39; CHECK-NEXT: ret i32 %array 40} 41 42define internal i32 @AllocaA0Size4() { 43entry: 44 %array = alloca i8, i32 4 45 %addr = ptrtoint i8* %array to i32 46 ret i32 %addr 47 48; CHECK: entry: 49; CHECK-NEXT: %array = alloca i8, i32 4 50; CHECK-NEXT: ret i32 %array 51} 52 53define internal i32 @AllocaA1Size4(i32 %n) { 54entry: 55 %array = alloca i8, i32 4, align 1 56 %addr = ptrtoint i8* %array to i32 57 ret i32 %addr 58 59; CHECK: entry: 60; CHECK-NEXT: %array = alloca i8, i32 4, align 1 61; CHECK-NEXT: ret i32 %array 62} 63 64define internal i32 @AllocaA2Size4(i32 %n) { 65entry: 66 %array = alloca i8, i32 4, align 2 67 %addr = ptrtoint i8* %array to i32 68 ret i32 %addr 69 70; CHECK: entry: 71; CHECK-NEXT: %array = alloca i8, i32 4, align 2 72; CHECK-NEXT: ret i32 %array 73} 74 75define internal i32 @AllocaA8Size4(i32 %n) { 76entry: 77 %array = alloca i8, i32 4, align 8 78 %addr = ptrtoint i8* %array to i32 79 ret i32 %addr 80 81; CHECK: entry: 82; CHECK-NEXT: %array = alloca i8, i32 4, align 8 83; CHECK-NEXT: ret i32 %array 84} 85 86define internal i32 @Alloca16Size4(i32 %n) { 87entry: 88 %array = alloca i8, i32 4, align 16 89 %addr = ptrtoint i8* %array to i32 90 ret i32 %addr 91 92; CHECK: entry: 93; CHECK-NEXT: %array = alloca i8, i32 4, align 16 94; CHECK-NEXT: ret i32 %array 95} 96 97; Show examples where size is not known at compile time. 98 99define internal i32 @AllocaVarsizeA0(i32 %n) { 100entry: 101 %array = alloca i8, i32 %n 102 %addr = ptrtoint i8* %array to i32 103 ret i32 %addr 104 105; CHECK: entry: 106; CHECK-NEXT: %array = alloca i8, i32 %n 107; CHECK-NEXT: ret i32 %array 108} 109 110define internal i32 @AllocaVarsizeA1(i32 %n) { 111entry: 112 %array = alloca i8, i32 %n, align 1 113 %addr = ptrtoint i8* %array to i32 114 ret i32 %addr 115 116; CHECK: entry: 117; CHECK-NEXT: %array = alloca i8, i32 %n, align 1 118; CHECK-NEXT: ret i32 %array 119} 120 121define internal i32 @AllocaVarsizeA2(i32 %n) { 122entry: 123 %array = alloca i8, i32 %n, align 2 124 %addr = ptrtoint i8* %array to i32 125 ret i32 %addr 126 127; CHECK: entry: 128; CHECK-NEXT: %array = alloca i8, i32 %n, align 2 129; CHECK-NEXT: ret i32 %array 130} 131 132define internal i32 @AllocaVarsizeA4(i32 %n) { 133entry: 134 %array = alloca i8, i32 %n, align 4 135 %addr = ptrtoint i8* %array to i32 136 ret i32 %addr 137 138; CHECK: entry: 139; CHECK-NEXT: %array = alloca i8, i32 %n, align 4 140; CHECK-NEXT: ret i32 %array 141} 142 143define internal i32 @AllocaVarsizeA8(i32 %n) { 144entry: 145 %array = alloca i8, i32 %n, align 8 146 %addr = ptrtoint i8* %array to i32 147 ret i32 %addr 148 149; CHECK: entry: 150; CHECK-NEXT: %array = alloca i8, i32 %n, align 8 151; CHECK-NEXT: ret i32 %array 152} 153 154define internal i32 @AllocaVarsizeA16(i32 %n) { 155entry: 156 %array = alloca i8, i32 %n, align 16 157 %addr = ptrtoint i8* %array to i32 158 ret i32 %addr 159 160; CHECK: entry: 161; CHECK-NEXT: %array = alloca i8, i32 %n, align 16 162; CHECK-NEXT: ret i32 %array 163} 164 165; NOIR: Total across all functions 166