Index: llvm/lib/Target/SystemZ/SystemZFrameLowering.cpp =================================================================== --- llvm/lib/Target/SystemZ/SystemZFrameLowering.cpp +++ llvm/lib/Target/SystemZ/SystemZFrameLowering.cpp @@ -316,6 +316,8 @@ processFunctionBeforeFrameFinalized(MachineFunction &MF, RegScavenger *RS) const { MachineFrameInfo &MFFrame = MF.getFrameInfo(); + SystemZMachineFunctionInfo *ZFI = MF.getInfo(); + MachineRegisterInfo *MRI = &MF.getRegInfo(); bool BackChain = MF.getFunction().hasFnAttribute("backchain"); if (!usePackedStack(MF) || BackChain) @@ -344,6 +346,29 @@ RS->addScavengingFrameIndex(MFFrame.CreateStackObject(8, Align(8), false)); RS->addScavengingFrameIndex(MFFrame.CreateStackObject(8, Align(8), false)); } + + // If R6 is used as an argument register its value is still callee + // saved. If it is not modified (and already saved) it must be marked as + // live throughout the entire function. + using use_iterator = MachineRegisterInfo::use_nodbg_iterator; + unsigned LowGPR = ZFI->getSpillGPRRegs().LowGPR; + if (MF.front().isLiveIn(SystemZ::R6D) && LowGPR && + SystemZMC::getFirstReg(LowGPR) > SystemZMC::getFirstReg(SystemZ::R6D)) { + // Clear any kill flags. + use_iterator E = MRI->use_nodbg_end(); + for (use_iterator I = MRI->use_nodbg_begin(SystemZ::R6D); I != E; ++I) + I->setIsKill(false); + + for (auto &MBB : MF) { + // Add to live-in list if needed. + if (!MBB.isLiveIn(SystemZ::R6D)) + MBB.addLiveIn(SystemZ::R6D); + // Add use on return instruction. + if (MBB.isReturnBlock()) + MachineInstrBuilder(MF, MBB.back()) + .addReg(SystemZ::R6D, RegState::Implicit); + } + } } // Emit instructions before MBBI (in MBB) to add NumBytes to Reg. Index: llvm/test/CodeGen/SystemZ/frame-26.ll =================================================================== --- /dev/null +++ llvm/test/CodeGen/SystemZ/frame-26.ll @@ -0,0 +1,265 @@ +; RUN: llc < %s -mtriple=s390x-linux-gnu -verify-machineinstrs \ +; RUN: -print-after=prologepilog 2>&1 | FileCheck %s +; REQUIRES: asserts +; +; Test that R6 when used for an argument is modelled as being live throughout +; the function when not saved in the prologue.. + +; CHECK: # *** IR Dump After Prologue/Epilogue Insertion & Frame Finalization ***: +; CHECK: # Machine code for function fun0: NoPHIs, TracksLiveness, NoVRegs, TiedOpsRewritten +; CHECK-LABEL: bb.0.bb: +; CHECK: liveins:{{.*}} $r6d +; CHECK: STMG killed $r7d, killed $r15d +; CHECK: STG renamable $r6d +; +; CHECK-LABEL: bb.1.bb: +; CHECK: liveins:{{.*}} $r6d +; +; CHECK-LABEL: bb.2.bb: +; CHECK: liveins:{{.*}} $r6d +; CHECK: Return implicit $r2l, implicit $r6d +; +; CHECK: End machine code for function fun0. + +@g_181 = external dso_local global i32, align 4 +@g_1390 = external dso_local constant i64*, align 8 + +define internal i8 @fun0(i8 %arg, i8 %arg1, i32 %arg2, i8 %arg3, i32* %arg4, float %F0, float %F1) #0 { +bb: + %i = alloca [2 x [2 x [3 x i64*]]], align 8 + %i5 = alloca [5 x [7 x [7 x i64**]]], align 8 + %i6 = alloca i64*****, align 8 + %i7 = alloca [5 x [8 x i32*]], align 8 + %i8 = alloca i32, align 4 + %i9 = alloca i32*, align 8 + %i10 = alloca i32*****, align 8 + %i11 = alloca i32, align 4 + %i12 = alloca i32***, align 8 + %i13 = alloca i32, align 4 + %i14 = alloca i32***, align 8 + %i15 = alloca i16**, align 8 + %i16 = alloca i64, align 8 + %i17 = alloca i16*, align 8 + %i18 = alloca [6 x [1 x i32]], align 4 + %i19 = alloca i32, align 4 + %i20 = alloca [7 x [8 x [4 x i32*]]], align 8 + %i21 = alloca i32**, align 8 + %i22 = alloca i64, align 8 + %i23 = alloca i16**, align 8 + %i24 = alloca i8, align 1 + %i25 = alloca [6 x [2 x [7 x i32*]]], align 8 + %i26 = alloca i32, align 4 + %i27 = alloca i32, align 4 + %i28 = alloca i32, align 4 + %i29 = alloca [4 x [2 x i8**]], align 8 + store i32* %arg4, i32** undef, align 8 + store i32* @g_181, i32** undef, align 8 + + %FB = fcmp olt float %F0, %F1 + %FR = select i1 %FB, float %F0, float %F1 + store volatile float %FR, float* undef + + %i30 = getelementptr inbounds [5 x [7 x [7 x i64**]]], [5 x [7 x [7 x i64**]]]* %i5, i64 0, i64 0 + %i31 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 0 + %i32 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i31, i64 0, i64 0 + %i33 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i32, i64 0, i64 2 + %i34 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 0 + %i35 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i34, i64 0, i64 1 + %i36 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i35, i64 0, i64 2 + store i64** @g_1390, i64*** undef, align 8 + %i37 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 1 + %i38 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i37, i64 0, i64 1 + %i39 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i38, i64 0, i64 1 + %i40 = getelementptr inbounds [7 x [7 x i64**]], [7 x [7 x i64**]]* %i30, i64 1 + %i41 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 1 + %i42 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i41, i64 0, i64 0 + %i43 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i42, i64 0, i64 1 + %i44 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 0 + %i45 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i44, i64 0, i64 0 + %i46 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i45, i64 0, i64 0 + store i64** %i46, i64*** undef, align 8 + %i47 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 1 + %i48 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i47, i64 0, i64 0 + %i49 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i48, i64 0, i64 2 + %i50 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 1 + %i51 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i50, i64 0, i64 1 + %i52 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i51, i64 0, i64 2 + %i53 = getelementptr inbounds [7 x [7 x i64**]], [7 x [7 x i64**]]* %i40, i64 1 + %i54 = getelementptr inbounds [7 x [7 x i64**]], [7 x [7 x i64**]]* %i53, i64 0, i64 0 + %i55 = getelementptr inbounds [7 x i64**], [7 x i64**]* %i54, i64 1 + %i56 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 0 + %i57 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i56, i64 0, i64 0 + %i58 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i57, i64 0, i64 1 + %i59 = getelementptr inbounds [7 x i64**], [7 x i64**]* %i55, i64 1 + %i60 = getelementptr inbounds [7 x i64**], [7 x i64**]* %i59, i64 0, i64 0 + %i61 = getelementptr inbounds i64**, i64*** %i60, i64 1 + store i64** null, i64*** %i61, align 8 + %i62 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 1 + %i63 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i62, i64 0, i64 0 + %i64 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i63, i64 0, i64 2 + store i64** %i64, i64*** null, align 8 + %i65 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 0 + %i66 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i65, i64 0, i64 1 + %i67 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i66, i64 0, i64 2 + store i64** %i67, i64*** undef, align 8 + %i68 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 1 + %i69 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i68, i64 0, i64 1 + %i70 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i69, i64 0, i64 0 + store i64** %i70, i64*** undef, align 8 + %i71 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 0 + %i72 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i71, i64 0, i64 0 + %i73 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i72, i64 0, i64 1 + store i64** %i73, i64*** undef, align 8 + %i74 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 0 + %i75 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i74, i64 0, i64 0 + %i76 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i75, i64 0, i64 2 + store i64** %i76, i64*** undef, align 8 + store i64** @g_1390, i64*** undef, align 8 + %i77 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 0 + %i78 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i77, i64 0, i64 1 + %i79 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i78, i64 0, i64 0 + store i64** %i79, i64*** undef, align 8 + %i80 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 1 + %i81 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i80, i64 0, i64 0 + %i82 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i81, i64 0, i64 0 + store i64** %i82, i64*** undef, align 8 + %i83 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 1 + %i84 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i83, i64 0, i64 1 + %i85 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i84, i64 0, i64 2 + store i64** %i85, i64*** undef, align 8 + %i86 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 1 + %i87 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i86, i64 0, i64 0 + %i88 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i87, i64 0, i64 1 + store i64** %i88, i64*** undef, align 8 + %i89 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 1 + %i90 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i89, i64 0, i64 1 + %i91 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i90, i64 0, i64 1 + store i64** %i91, i64*** undef, align 8 + %i92 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 0 + %i93 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i92, i64 0, i64 0 + %i94 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i93, i64 0, i64 0 + store i64** %i94, i64*** undef, align 8 + store i32* @g_181, i32** undef, align 8 + ret i8 0 +} + +; Same function but in a single block which will make the verifier complain +; if R6 is killed by the original store before the point where the +; RegScavenger inserts its (killing) store of R6. +define internal i8 @fun1(i8 %arg, i8 %arg1, i32 %arg2, i8 %arg3, i32* %arg4) #0 { +bb: + %i = alloca [2 x [2 x [3 x i64*]]], align 8 + %i5 = alloca [5 x [7 x [7 x i64**]]], align 8 + %i6 = alloca i64*****, align 8 + %i7 = alloca [5 x [8 x i32*]], align 8 + %i8 = alloca i32, align 4 + %i9 = alloca i32*, align 8 + %i10 = alloca i32*****, align 8 + %i11 = alloca i32, align 4 + %i12 = alloca i32***, align 8 + %i13 = alloca i32, align 4 + %i14 = alloca i32***, align 8 + %i15 = alloca i16**, align 8 + %i16 = alloca i64, align 8 + %i17 = alloca i16*, align 8 + %i18 = alloca [6 x [1 x i32]], align 4 + %i19 = alloca i32, align 4 + %i20 = alloca [7 x [8 x [4 x i32*]]], align 8 + %i21 = alloca i32**, align 8 + %i22 = alloca i64, align 8 + %i23 = alloca i16**, align 8 + %i24 = alloca i8, align 1 + %i25 = alloca [6 x [2 x [7 x i32*]]], align 8 + %i26 = alloca i32, align 4 + %i27 = alloca i32, align 4 + %i28 = alloca i32, align 4 + %i29 = alloca [4 x [2 x i8**]], align 8 + store i32* %arg4, i32** undef, align 8 + store i32* @g_181, i32** undef, align 8 + %i30 = getelementptr inbounds [5 x [7 x [7 x i64**]]], [5 x [7 x [7 x i64**]]]* %i5, i64 0, i64 0 + %i31 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 0 + %i32 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i31, i64 0, i64 0 + %i33 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i32, i64 0, i64 2 + %i34 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 0 + %i35 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i34, i64 0, i64 1 + %i36 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i35, i64 0, i64 2 + store i64** @g_1390, i64*** undef, align 8 + %i37 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 1 + %i38 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i37, i64 0, i64 1 + %i39 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i38, i64 0, i64 1 + %i40 = getelementptr inbounds [7 x [7 x i64**]], [7 x [7 x i64**]]* %i30, i64 1 + %i41 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 1 + %i42 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i41, i64 0, i64 0 + %i43 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i42, i64 0, i64 1 + %i44 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 0 + %i45 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i44, i64 0, i64 0 + %i46 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i45, i64 0, i64 0 + store i64** %i46, i64*** undef, align 8 + %i47 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 1 + %i48 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i47, i64 0, i64 0 + %i49 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i48, i64 0, i64 2 + %i50 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 1 + %i51 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i50, i64 0, i64 1 + %i52 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i51, i64 0, i64 2 + %i53 = getelementptr inbounds [7 x [7 x i64**]], [7 x [7 x i64**]]* %i40, i64 1 + %i54 = getelementptr inbounds [7 x [7 x i64**]], [7 x [7 x i64**]]* %i53, i64 0, i64 0 + %i55 = getelementptr inbounds [7 x i64**], [7 x i64**]* %i54, i64 1 + %i56 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 0 + %i57 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i56, i64 0, i64 0 + %i58 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i57, i64 0, i64 1 + %i59 = getelementptr inbounds [7 x i64**], [7 x i64**]* %i55, i64 1 + %i60 = getelementptr inbounds [7 x i64**], [7 x i64**]* %i59, i64 0, i64 0 + %i61 = getelementptr inbounds i64**, i64*** %i60, i64 1 + store i64** null, i64*** %i61, align 8 + %i62 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 1 + %i63 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i62, i64 0, i64 0 + %i64 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i63, i64 0, i64 2 + store i64** %i64, i64*** null, align 8 + %i65 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 0 + %i66 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i65, i64 0, i64 1 + %i67 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i66, i64 0, i64 2 + store i64** %i67, i64*** undef, align 8 + %i68 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 1 + %i69 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i68, i64 0, i64 1 + %i70 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i69, i64 0, i64 0 + store i64** %i70, i64*** undef, align 8 + %i71 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 0 + %i72 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i71, i64 0, i64 0 + %i73 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i72, i64 0, i64 1 + store i64** %i73, i64*** undef, align 8 + %i74 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 0 + %i75 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i74, i64 0, i64 0 + %i76 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i75, i64 0, i64 2 + store i64** %i76, i64*** undef, align 8 + store i64** @g_1390, i64*** undef, align 8 + %i77 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 0 + %i78 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i77, i64 0, i64 1 + %i79 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i78, i64 0, i64 0 + store i64** %i79, i64*** undef, align 8 + %i80 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 1 + %i81 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i80, i64 0, i64 0 + %i82 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i81, i64 0, i64 0 + store i64** %i82, i64*** undef, align 8 + %i83 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 1 + %i84 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i83, i64 0, i64 1 + %i85 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i84, i64 0, i64 2 + store i64** %i85, i64*** undef, align 8 + %i86 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 1 + %i87 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i86, i64 0, i64 0 + %i88 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i87, i64 0, i64 1 + store i64** %i88, i64*** undef, align 8 + %i89 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 1 + %i90 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i89, i64 0, i64 1 + %i91 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i90, i64 0, i64 1 + store i64** %i91, i64*** undef, align 8 + %i92 = getelementptr inbounds [2 x [2 x [3 x i64*]]], [2 x [2 x [3 x i64*]]]* %i, i64 0, i64 0 + %i93 = getelementptr inbounds [2 x [3 x i64*]], [2 x [3 x i64*]]* %i92, i64 0, i64 0 + %i94 = getelementptr inbounds [3 x i64*], [3 x i64*]* %i93, i64 0, i64 0 + store i64** %i94, i64*** undef, align 8 + store i32* @g_181, i32** undef, align 8 + ret i8 0 +} + + +attributes #0 = { "frame-pointer"="all" } +