From e95e915889c929eb1f86290c8b85c8a22beed80b Mon Sep 17 00:00:00 2001 From: Diana Picus Date: Fri, 18 Aug 2017 11:16:11 +0200 Subject: Revert "GlobalISel (AArch64): fix ABI at border between GPRs and SP." This reverts commit e8fd20964798ca6d46d2729dd3a789707a6416da. --- lib/Target/AArch64/AArch64CallLowering.cpp | 6 +--- test/CodeGen/AArch64/GlobalISel/call-translator.ll | 39 ---------------------- 2 files changed, 1 insertion(+), 44 deletions(-) diff --git a/lib/Target/AArch64/AArch64CallLowering.cpp b/lib/Target/AArch64/AArch64CallLowering.cpp index a0ef3262483..fc09763ed38 100644 --- a/lib/Target/AArch64/AArch64CallLowering.cpp +++ b/lib/Target/AArch64/AArch64CallLowering.cpp @@ -188,16 +188,12 @@ void AArch64CallLowering::splitToValueTypes( } unsigned FirstRegIdx = SplitArgs.size(); - bool AlreadySplit = false; for (auto SplitVT : SplitVTs) { + // FIXME: set split flags if they're actually used (e.g. i128 on AAPCS). Type *SplitTy = SplitVT.getTypeForEVT(Ctx); SplitArgs.push_back( ArgInfo{MRI.createGenericVirtualRegister(getLLTForType(*SplitTy, DL)), SplitTy, OrigArg.Flags, OrigArg.IsFixed}); - if (!AlreadySplit) { - SplitArgs.back().Flags.setSplit(); - AlreadySplit = true; - } } for (unsigned i = 0; i < Offsets.size(); ++i) diff --git a/test/CodeGen/AArch64/GlobalISel/call-translator.ll b/test/CodeGen/AArch64/GlobalISel/call-translator.ll index b5d85055f23..1cc196be359 100644 --- a/test/CodeGen/AArch64/GlobalISel/call-translator.ll +++ b/test/CodeGen/AArch64/GlobalISel/call-translator.ll @@ -215,42 +215,3 @@ define void @test_call_stack() { define void @test_mem_i1([8 x i64], i1 %in) { ret void } - -; CHECK-LABEL: name: test_split_struct -; CHECK: [[STRUCT:%[0-9]+]](s128) = G_LOAD {{.*}}(p0) -; CHECK: [[LO:%[0-9]+]](s64) = G_EXTRACT [[STRUCT]](s128), 0 -; CHECK: [[HI:%[0-9]+]](s64) = G_EXTRACT [[STRUCT]](s128), 64 - -; CHECK: [[SP:%[0-9]+]](p0) = COPY %sp -; CHECK: [[OFF:%[0-9]+]](s64) = G_CONSTANT i64 0 -; CHECK: [[ADDR:%[0-9]+]](p0) = G_GEP [[SP]], [[OFF]] -; CHECK: G_STORE [[LO]](s64), [[ADDR]](p0) :: (store 8 into stack, align 0) - -; CHECK: [[SP:%[0-9]+]](p0) = COPY %sp -; CHECK: [[OFF:%[0-9]+]](s64) = G_CONSTANT i64 8 -; CHECK: [[ADDR:%[0-9]+]](p0) = G_GEP [[SP]], [[OFF]] -; CHECK: G_STORE [[HI]](s64), [[ADDR]](p0) :: (store 8 into stack + 8, align 0) -define void @test_split_struct([2 x i64]* %ptr) { - %struct = load [2 x i64], [2 x i64]* %ptr - call void @take_split_struct([2 x i64]* null, i64 1, i64 2, i64 3, - i64 4, i64 5, i64 6, - [2 x i64] %struct) - ret void -} - -; CHECK-LABEL: name: take_split_struct -; CHECK: fixedStack: -; CHECK-DAG: - { id: [[LO_FRAME:[0-9]+]], type: default, offset: 0, size: 8 -; CHECK-DAG: - { id: [[HI_FRAME:[0-9]+]], type: default, offset: 8, size: 8 - -; CHECK: [[LOPTR:%[0-9]+]](p0) = G_FRAME_INDEX %fixed-stack.[[LO_FRAME]] -; CHECK: [[LO:%[0-9]+]](s64) = G_LOAD [[LOPTR]](p0) :: (invariant load 8 from %fixed-stack.[[LO_FRAME]], align 0) - -; CHECK: [[HIPTR:%[0-9]+]](p0) = G_FRAME_INDEX %fixed-stack.[[HI_FRAME]] -; CHECK: [[HI:%[0-9]+]](s64) = G_LOAD [[HIPTR]](p0) :: (invariant load 8 from %fixed-stack.[[HI_FRAME]], align 0) -define void @take_split_struct([2 x i64]* %ptr, i64, i64, i64, - i64, i64, i64, - [2 x i64] %in) { - store [2 x i64] %in, [2 x i64]* %ptr - ret void -} -- cgit v1.2.3