1da42b284SSergei Barannikov //===- CCStateTest.cpp ----------------------------------------------------===// 2da42b284SSergei Barannikov // 3da42b284SSergei Barannikov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4da42b284SSergei Barannikov // See https://llvm.org/LICENSE.txt for license information. 5da42b284SSergei Barannikov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6da42b284SSergei Barannikov // 7da42b284SSergei Barannikov //===----------------------------------------------------------------------===// 8da42b284SSergei Barannikov 9da42b284SSergei Barannikov #include "llvm/CodeGen/CallingConvLower.h" 10*bb3f5e1fSMatin Raayai #include "llvm/CodeGen/CodeGenTargetMachineImpl.h" 11da42b284SSergei Barannikov #include "llvm/CodeGen/MachineFunction.h" 12da42b284SSergei Barannikov #include "llvm/CodeGen/MachineModuleInfo.h" 13da42b284SSergei Barannikov #include "llvm/CodeGen/TargetFrameLowering.h" 14da42b284SSergei Barannikov #include "llvm/CodeGen/TargetInstrInfo.h" 15da42b284SSergei Barannikov #include "llvm/CodeGen/TargetLowering.h" 16da42b284SSergei Barannikov #include "llvm/CodeGen/TargetRegisterInfo.h" 17da42b284SSergei Barannikov #include "llvm/CodeGen/TargetSubtargetInfo.h" 18da42b284SSergei Barannikov #include "llvm/IR/Module.h" 19da42b284SSergei Barannikov #include "llvm/MC/TargetRegistry.h" 20da42b284SSergei Barannikov #include "gtest/gtest.h" 21da42b284SSergei Barannikov 22da42b284SSergei Barannikov using namespace llvm; 23da42b284SSergei Barannikov 24da42b284SSergei Barannikov namespace { 25da42b284SSergei Barannikov 26da42b284SSergei Barannikov #include "MFCommon.inc" 27da42b284SSergei Barannikov 28da42b284SSergei Barannikov TEST(CCStateTest, NegativeOffsets) { 29da42b284SSergei Barannikov LLVMContext Ctx; 30da42b284SSergei Barannikov Module Mod("Module", Ctx); 31da42b284SSergei Barannikov auto MF = createMachineFunction(Ctx, Mod); 32da42b284SSergei Barannikov 33da42b284SSergei Barannikov SmallVector<CCValAssign, 8> Locs; 34da42b284SSergei Barannikov CCState Info(CallingConv::C, /*IsVarArg=*/false, *MF, Locs, Ctx, 35da42b284SSergei Barannikov /*NegativeOffsets=*/true); 36da42b284SSergei Barannikov 37da42b284SSergei Barannikov ASSERT_EQ(Info.AllocateStack(1, Align(1)), -1); 38da42b284SSergei Barannikov ASSERT_EQ(Info.AllocateStack(1, Align(2)), -2); 39da42b284SSergei Barannikov ASSERT_EQ(Info.AllocateStack(1, Align(2)), -4); 40da42b284SSergei Barannikov ASSERT_EQ(Info.AllocateStack(1, Align(1)), -5); 41da42b284SSergei Barannikov ASSERT_EQ(Info.AllocateStack(2, Align(2)), -8); 42da42b284SSergei Barannikov ASSERT_EQ(Info.AllocateStack(2, Align(2)), -10); 43da42b284SSergei Barannikov ASSERT_EQ(Info.AllocateStack(2, Align(1)), -12); 44da42b284SSergei Barannikov ASSERT_EQ(Info.AllocateStack(1, Align(1)), -13); 45da42b284SSergei Barannikov ASSERT_EQ(Info.getStackSize(), 13u); 46da42b284SSergei Barannikov ASSERT_EQ(Info.getAlignedCallFrameSize(), 14u); 47da42b284SSergei Barannikov } 48da42b284SSergei Barannikov 49da42b284SSergei Barannikov } // namespace 50