<html><head><meta http-equiv="content-type" content="text/html; charset=GB2312"><style>body { line-height: 1.5; }blockquote { margin-top: 0px; margin-bottom: 0px; margin-left: 0.5em; }body { font-size: 10.5pt; font-family: Î¢ÈíÑźÚ; color: rgb(0, 0, 0); line-height: 1.5; }</style></head><body>
<table width="99.99%" height="100%" style="padding: 10px; background-color: transparent;" border="0" cellpadding="0" cellspacing="0" background="cid:_Foxmail.1@f3d4c610-3eef-b81f-cf07-c1d732a8434b">
<tbody><tr>
<td valign="top" style="width:100%;height:100%;">
<div style="">
<div>Hi Mehdi</div><div>I want to know <span style="background-color: transparent; line-height: 1.5;">  how to generate the IR ,that do not use the ¡°main.a¡± global constant variable, and llvm.memcpy  intrinsic  , instead of liking  other local variable initialization :</span></div><div><span style="background-color: transparent; line-height: 1.5;">    </span><span style="background-color: transparent; line-height: 1.5;"> </span><span style="color: rgb(0, 0, 0); background-color: transparent; line-height: 1.5;">store i32 7, i32* %b, align 4</span></div><div><span style="color: rgb(0, 0, 0); background-color: transparent; line-height: 1.5;">     For example :</span></div><div><span style="color: rgb(0, 0, 0); background-color: transparent; line-height: 1.5;">     %element0 = </span><span style="background-color: transparent; line-height: 1.5;">getelementptr inbounds  [3 x i32]* %a, i32 0, i32 0</span></div><div><span style="background-color: transparent; line-height: 1.5;">    store i32 1, i32*  %element0,  align 4</span></div><div><span style="background-color: transparent; line-height: 1.5;">     </span><span style="color: rgb(0, 0, 0); background-color: transparent; line-height: 1.5;"> %element1 = </span><span style="background-color: transparent; line-height: 1.5;">getelementptr inbounds [3 x i32]* %a, i32 0, i32 1</span></div><div><span style="background-color: transparent; line-height: 1.5;">    store i32 2, i32*  %element1,   align 4</span></div><div><span style="background-color: transparent; line-height: 1.5;">Thank you</span></div><div><span style="background-color: transparent; font-size: 10.5pt; line-height: 1.5;">     </span></div><blockquote style="margin-top: 0px; margin-bottom: 0px; margin-left: 0.5em;"><div><div> </div>
<div>> On Dec 27, 2016, at 11:09 PM, liuyu11@ict.ac.cn via llvm-dev <llvm-dev@lists.llvm.org> wrote:</div>
<div>> </div>
<div>> Hello,everyone:</div>
<div>>      I want to known how to let clang compile my local array to local variables:</div>
<div>>      I have the code :</div>
<div>>     int main()</div>
<div>> {</div>
<div>>         int a[3]={1,2,3};</div>
<div>> </div>
<div>>         int b=7;</div>
<div>>         int c=8;</div>
<div>>         int d=9;</div>
<div>>         int e=10;</div>
<div>>         int f=11;</div>
<div>>         test(b,c,d,e,f,a);</div>
<div>>         return 0;</div>
<div>> }</div>
<div>>  I use clang command:clang --target=mipsel -emit-llvm -S a.c -o a.ll</div>
<div>>  The a.ll is:</div>
<div>> @main.a = private unnamed_addr constant [3 x i32] [i32 1, i32 2, i32 3], align 4</div>
<div>> define i32 @main() #0 {</div>
<div>> entry:</div>
<div>>   %retval = alloca i32, align 4</div>
<div>>   %a = alloca [3 x i32], align 4</div>
<div>>   %b = alloca i32, align 4</div>
<div>>   %c = alloca i32, align 4</div>
<div>>   %d = alloca i32, align 4</div>
<div>>   %e = alloca i32, align 4</div>
<div>>   %f = alloca i32, align 4</div>
<div>>   store i32 0, i32* %retval</div>
<div>>   %0 = bitcast [3 x i32]* %a to i8*</div>
<div>>   call void @llvm.memcpy.p0i8.p0i8.i32(i8* %0, i8* bitcast ([3 x i32]* @main.a to i8*), i32 12, i32 4, i1 false)</div>
<div>>   store i32 7, i32* %b, align 4</div>
<div>>   store i32 8, i32* %c, align 4</div>
<div>>   store i32 9, i32* %d, align 4</div>
<div>>   store i32 10, i32* %e, align 4</div>
<div>>   store i32 11, i32* %f, align 4</div>
<div>>   %1 = load i32, i32* %b, align 4</div>
<div>>   %2 = load i32, i32* %c, align 4</div>
<div>>   %3 = load i32, i32* %d, align 4</div>
<div>>   %4 = load i32, i32* %e, align 4</div>
<div>>   %5 = load i32, i32* %f, align 4</div>
<div>>   %arraydecay = getelementptr inbounds [3 x i32], [3 x i32]* %a, i32 0, i32 0</div>
<div>>   call void @test(i32 signext %1, i32 signext %2, i32 signext %3, i32 signext %4, i32 signext %5, i32* %arraydecay)</div>
<div>>   ret i32 0;}</div>
<div>>  I want to known how to compile local array a  to a local variable</div>
<div> </div>
<div>Your question is not totally clear: a *is* a ¡°local variable¡± on the stack, this is the line:</div>
<div> </div>
<div>>  %a = alloca [3 x i32], align 4</div>
<div> </div>
<div>It is initialized here:</div>
<div> </div>
<div>>   call void @llvm.memcpy.p0i8.p0i8.i32(i8* %0, i8* bitcast ([3 x i32]* @main.a to i8*), i32 12, i32 4, i1 false)</div>
<div> </div>
<div>using the constant data that is stored in a global:</div>
<div> </div>
<div>> @main.a = private unnamed_addr constant [3 x i32] [i32 1, i32 2, i32 3], align 4</div>
<div> </div>
<div>What would you like the code to look like?</div>
<div> </div>
<div>¡ª </div>
<div>Mehdi</div>
<div> </div>
</div></blockquote>
<div></div></div>
</td>
</tr>
</tbody></table>
</body></html>