1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -inline -S | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-v128:128:128-n32:64" 4*9880d681SAndroid Build Coastguard Workertarget triple = "powerpc64-unknown-linux-gnu" 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker%struct.s = type { i32, i32 } 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerdefine void @foo(%struct.s* byval nocapture readonly %a) { 9*9880d681SAndroid Build Coastguard Workerentry: 10*9880d681SAndroid Build Coastguard Worker %x = alloca [2 x i32], align 4 11*9880d681SAndroid Build Coastguard Worker %a1 = getelementptr inbounds %struct.s, %struct.s* %a, i64 0, i32 0 12*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %a1, align 4 13*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds [2 x i32], [2 x i32]* %x, i64 0, i64 0 14*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %arrayidx, align 4 15*9880d681SAndroid Build Coastguard Worker %b = getelementptr inbounds %struct.s, %struct.s* %a, i64 0, i32 1 16*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* %b, align 4 17*9880d681SAndroid Build Coastguard Worker %arrayidx2 = getelementptr inbounds [2 x i32], [2 x i32]* %x, i64 0, i64 1 18*9880d681SAndroid Build Coastguard Worker store i32 %1, i32* %arrayidx2, align 4 19*9880d681SAndroid Build Coastguard Worker call void @bar(i32* %arrayidx) #2 20*9880d681SAndroid Build Coastguard Worker ret void 21*9880d681SAndroid Build Coastguard Worker} 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Workerdefine void @foo0(%struct.s* byval nocapture readonly %a) { 24*9880d681SAndroid Build Coastguard Workerentry: 25*9880d681SAndroid Build Coastguard Worker %x = alloca [2 x i32] 26*9880d681SAndroid Build Coastguard Worker %a1 = getelementptr inbounds %struct.s, %struct.s* %a, i64 0, i32 0 27*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %a1, align 4 28*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds [2 x i32], [2 x i32]* %x, i64 0, i64 0 29*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %arrayidx, align 4 30*9880d681SAndroid Build Coastguard Worker %b = getelementptr inbounds %struct.s, %struct.s* %a, i64 0, i32 1 31*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* %b, align 4 32*9880d681SAndroid Build Coastguard Worker %arrayidx2 = getelementptr inbounds [2 x i32], [2 x i32]* %x, i64 0, i64 1 33*9880d681SAndroid Build Coastguard Worker store i32 %1, i32* %arrayidx2, align 4 34*9880d681SAndroid Build Coastguard Worker call void @bar(i32* %arrayidx) #2 35*9880d681SAndroid Build Coastguard Worker ret void 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workerdefine void @foo1(%struct.s* byval nocapture readonly %a) { 39*9880d681SAndroid Build Coastguard Workerentry: 40*9880d681SAndroid Build Coastguard Worker %x = alloca [2 x i32], align 1 41*9880d681SAndroid Build Coastguard Worker %a1 = getelementptr inbounds %struct.s, %struct.s* %a, i64 0, i32 0 42*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %a1, align 4 43*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds [2 x i32], [2 x i32]* %x, i64 0, i64 0 44*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %arrayidx, align 4 45*9880d681SAndroid Build Coastguard Worker %b = getelementptr inbounds %struct.s, %struct.s* %a, i64 0, i32 1 46*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* %b, align 4 47*9880d681SAndroid Build Coastguard Worker %arrayidx2 = getelementptr inbounds [2 x i32], [2 x i32]* %x, i64 0, i64 1 48*9880d681SAndroid Build Coastguard Worker store i32 %1, i32* %arrayidx2, align 4 49*9880d681SAndroid Build Coastguard Worker call void @bar(i32* %arrayidx) #2 50*9880d681SAndroid Build Coastguard Worker ret void 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Workerdeclare void @bar(i32*) #1 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Workerdefine void @goo(%struct.s* byval nocapture readonly %a) { 56*9880d681SAndroid Build Coastguard Workerentry: 57*9880d681SAndroid Build Coastguard Worker %x = alloca [2 x i32], align 32 58*9880d681SAndroid Build Coastguard Worker %a1 = getelementptr inbounds %struct.s, %struct.s* %a, i64 0, i32 0 59*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %a1, align 4 60*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds [2 x i32], [2 x i32]* %x, i64 0, i64 0 61*9880d681SAndroid Build Coastguard Worker store i32 %0, i32* %arrayidx, align 32 62*9880d681SAndroid Build Coastguard Worker %b = getelementptr inbounds %struct.s, %struct.s* %a, i64 0, i32 1 63*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* %b, align 4 64*9880d681SAndroid Build Coastguard Worker %arrayidx2 = getelementptr inbounds [2 x i32], [2 x i32]* %x, i64 0, i64 1 65*9880d681SAndroid Build Coastguard Worker store i32 %1, i32* %arrayidx2, align 4 66*9880d681SAndroid Build Coastguard Worker call void @bar(i32* %arrayidx) #2 67*9880d681SAndroid Build Coastguard Worker ret void 68*9880d681SAndroid Build Coastguard Worker} 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @main 71*9880d681SAndroid Build Coastguard Worker; CHECK: alloca [2 x i32], align 32 72*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: alloca [2 x i32] 73*9880d681SAndroid Build Coastguard Worker; CHECK: ret i32 0 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Workerdefine signext i32 @main() { 76*9880d681SAndroid Build Coastguard Workerentry: 77*9880d681SAndroid Build Coastguard Worker %a = alloca i64, align 8 78*9880d681SAndroid Build Coastguard Worker %tmpcast = bitcast i64* %a to %struct.s* 79*9880d681SAndroid Build Coastguard Worker store i64 0, i64* %a, align 8 80*9880d681SAndroid Build Coastguard Worker %a1 = bitcast i64* %a to i32* 81*9880d681SAndroid Build Coastguard Worker store i32 1, i32* %a1, align 8 82*9880d681SAndroid Build Coastguard Worker call void @foo(%struct.s* byval %tmpcast) 83*9880d681SAndroid Build Coastguard Worker store i32 2, i32* %a1, align 8 84*9880d681SAndroid Build Coastguard Worker call void @goo(%struct.s* byval %tmpcast) 85*9880d681SAndroid Build Coastguard Worker ret i32 0 86*9880d681SAndroid Build Coastguard Worker} 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test0 89*9880d681SAndroid Build Coastguard Worker; CHECK: alloca [2 x i32], align 32 90*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: alloca [2 x i32] 91*9880d681SAndroid Build Coastguard Worker; CHECK: ret i32 0 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Workerdefine signext i32 @test0() { 94*9880d681SAndroid Build Coastguard Workerentry: 95*9880d681SAndroid Build Coastguard Worker %a = alloca i64, align 8 96*9880d681SAndroid Build Coastguard Worker %tmpcast = bitcast i64* %a to %struct.s* 97*9880d681SAndroid Build Coastguard Worker store i64 0, i64* %a, align 8 98*9880d681SAndroid Build Coastguard Worker %a1 = bitcast i64* %a to i32* 99*9880d681SAndroid Build Coastguard Worker store i32 1, i32* %a1, align 8 100*9880d681SAndroid Build Coastguard Worker call void @foo0(%struct.s* byval %tmpcast) 101*9880d681SAndroid Build Coastguard Worker store i32 2, i32* %a1, align 8 102*9880d681SAndroid Build Coastguard Worker call void @goo(%struct.s* byval %tmpcast) 103*9880d681SAndroid Build Coastguard Worker ret i32 0 104*9880d681SAndroid Build Coastguard Worker} 105