From 5df4695c188727feec8081ebc3ac805e7e54a6e4 Mon Sep 17 00:00:00 2001 From: Hans Wennborg Date: Tue, 26 May 2015 19:39:54 +0000 Subject: [PATCH] Revert r238200: "[MIPS] fix extension of integer types (function calls)" mips-unsigned-ext-var.c and mips-unsigned-extend.c fail in some builds. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@238237 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/ABIInfo.h | 2 -- lib/CodeGen/CGCall.cpp | 8 ++------ lib/CodeGen/TargetInfo.cpp | 15 --------------- test/CodeGen/atomics-inlining.c | 4 ++-- test/CodeGen/mips-unsigned-ext-var.c | 22 ---------------------- test/CodeGen/mips-unsigned-extend.c | 15 --------------- test/CodeGenCXX/mips-size_t-ptrdiff_t.cpp | 8 ++++---- 7 files changed, 8 insertions(+), 66 deletions(-) delete mode 100644 test/CodeGen/mips-unsigned-ext-var.c delete mode 100644 test/CodeGen/mips-unsigned-extend.c diff --git a/lib/CodeGen/ABIInfo.h b/lib/CodeGen/ABIInfo.h index cc8652e169..7e7f7fa206 100644 --- a/lib/CodeGen/ABIInfo.h +++ b/lib/CodeGen/ABIInfo.h @@ -87,8 +87,6 @@ namespace clang { virtual bool isHomogeneousAggregateSmallEnough(const Type *Base, uint64_t Members) const; - virtual bool shouldSignExtUnsignedType(QualType Ty) const; - bool isHomogeneousAggregate(QualType Ty, const Type *&Base, uint64_t &Members) const; diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp index f2340530d6..b73ad9e4fb 100644 --- a/lib/CodeGen/CGCall.cpp +++ b/lib/CodeGen/CGCall.cpp @@ -1588,12 +1588,8 @@ void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &FI, case ABIArgInfo::Extend: if (ParamType->isSignedIntegerOrEnumerationType()) Attrs.addAttribute(llvm::Attribute::SExt); - else if (ParamType->isUnsignedIntegerOrEnumerationType()) { - if (getTypes().getABIInfo().shouldSignExtUnsignedType(ParamType)) - Attrs.addAttribute(llvm::Attribute::SExt); - else - Attrs.addAttribute(llvm::Attribute::ZExt); - } + else if (ParamType->isUnsignedIntegerOrEnumerationType()) + Attrs.addAttribute(llvm::Attribute::ZExt); // FALL THROUGH case ABIArgInfo::Direct: if (ArgNo == 0 && FI.isChainCall()) diff --git a/lib/CodeGen/TargetInfo.cpp b/lib/CodeGen/TargetInfo.cpp index 53154b513e..3b09d4b93f 100644 --- a/lib/CodeGen/TargetInfo.cpp +++ b/lib/CodeGen/TargetInfo.cpp @@ -108,10 +108,6 @@ bool ABIInfo::isHomogeneousAggregateSmallEnough(const Type *Base, return false; } -bool ABIInfo::shouldSignExtUnsignedType(QualType Ty) const { - return false; -} - void ABIArgInfo::dump() const { raw_ostream &OS = llvm::errs(); OS << "(ABIArgInfo Kind="; @@ -5551,7 +5547,6 @@ public: void computeInfo(CGFunctionInfo &FI) const override; llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty, CodeGenFunction &CGF) const override; - bool shouldSignExtUnsignedType(QualType Ty) const override; }; class MIPSTargetCodeGenInfo : public TargetCodeGenInfo { @@ -5854,16 +5849,6 @@ llvm::Value* MipsABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty, return AddrTyped; } -bool MipsABIInfo::shouldSignExtUnsignedType(QualType Ty) const { - int TySize = getContext().getTypeSize(Ty); - - // MIPS64 ABI requires unsigned 32 bit integers to be sign extended. - if (Ty->isUnsignedIntegerOrEnumerationType() && TySize == 32) - return true; - - return false; -} - bool MIPSTargetCodeGenInfo::initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF, llvm::Value *Address) const { diff --git a/test/CodeGen/atomics-inlining.c b/test/CodeGen/atomics-inlining.c index 23a79a2d28..9fdad4f51f 100644 --- a/test/CodeGen/atomics-inlining.c +++ b/test/CodeGen/atomics-inlining.c @@ -76,8 +76,8 @@ void test1(void) { // MIPS32: store atomic i32 {{.*}}, i32* @i1 seq_cst // MIPS32: call i64 @__atomic_load_8(i8* bitcast (i64* @ll1 to i8*) // MIPS32: call void @__atomic_store_8(i8* bitcast (i64* @ll1 to i8*), i64 -// MIPS32: call void @__atomic_load(i32 signext 100, i8* getelementptr inbounds ([100 x i8], [100 x i8]* @a1, i32 0, i32 0), i8* getelementptr inbounds ([100 x i8], [100 x i8]* @a2, i32 0, i32 0) -// MIPS32: call void @__atomic_store(i32 signext 100, i8* getelementptr inbounds ([100 x i8], [100 x i8]* @a1, i32 0, i32 0), i8* getelementptr inbounds ([100 x i8], [100 x i8]* @a2, i32 0, i32 0) +// MIPS32: call void @__atomic_load(i32 zeroext 100, i8* getelementptr inbounds ([100 x i8], [100 x i8]* @a1, i32 0, i32 0), i8* getelementptr inbounds ([100 x i8], [100 x i8]* @a2, i32 0, i32 0) +// MIPS32: call void @__atomic_store(i32 zeroext 100, i8* getelementptr inbounds ([100 x i8], [100 x i8]* @a1, i32 0, i32 0), i8* getelementptr inbounds ([100 x i8], [100 x i8]* @a2, i32 0, i32 0) // MIPS64-LABEL: define void @test1 // MIPS64: = load atomic i8, i8* @c1 seq_cst diff --git a/test/CodeGen/mips-unsigned-ext-var.c b/test/CodeGen/mips-unsigned-ext-var.c deleted file mode 100644 index f6f6f0e26c..0000000000 --- a/test/CodeGen/mips-unsigned-ext-var.c +++ /dev/null @@ -1,22 +0,0 @@ -// RUN: %clang -target mips64-unknown-linux -O2 -mabi=n64 -S -emit-llvm %s -o - | FileCheck %s -check-prefix=N64 -// RUN: %clang -target mips64-unknown-linux -O2 -mabi=n32 -S -emit-llvm %s -o - | FileCheck %s -check-prefix=N32 -// RUN: %clang -target mips-unknown-linux -O2 -mabi=o32 -S -emit-llvm %s -o - | FileCheck %s -check-prefix=O32 - -#include - -unsigned foo(int x, ...) { - va_list valist; - va_start(valist, x); - unsigned a; - a = va_arg(valist, unsigned); - return a; -} - -void foo1() { - unsigned f = 0xffffffe0; - foo(1,f); -} - -//N64: call i32 (i32, ...) @foo(i32 signext undef, i32 signext -32) -//N32: call i32 (i32, ...) @foo(i32 signext undef, i32 signext -32) -//O32: call i32 (i32, ...) @foo(i32 signext undef, i32 signext -32) \ No newline at end of file diff --git a/test/CodeGen/mips-unsigned-extend.c b/test/CodeGen/mips-unsigned-extend.c deleted file mode 100644 index 2074967f14..0000000000 --- a/test/CodeGen/mips-unsigned-extend.c +++ /dev/null @@ -1,15 +0,0 @@ -// RUN: %clang -target mips64-unknown-linux -O0 -mabi=n64 -S -emit-llvm %s -o - | FileCheck %s -check-prefix=N64 -// RUN: %clang -target mips64-unknown-linux -O0 -mabi=n32 -S -emit-llvm %s -o - | FileCheck %s -check-prefix=N32 -// RUN: %clang -target mips-unknown-linux -O0 -mabi=o32 -S -emit-llvm %s -o - | FileCheck %s -check-prefix=O32 - -void foo(unsigned a) { -} - -void foo1() { - unsigned f = 0xffffffe0; - foo(f); -} - -// N64: call void @foo(i32 signext %0) -// N32: call void @foo(i32 signext %0) -// O32: call void @foo(i32 signext %0) \ No newline at end of file diff --git a/test/CodeGenCXX/mips-size_t-ptrdiff_t.cpp b/test/CodeGenCXX/mips-size_t-ptrdiff_t.cpp index 1ff01820bb..869fdedf86 100644 --- a/test/CodeGenCXX/mips-size_t-ptrdiff_t.cpp +++ b/test/CodeGenCXX/mips-size_t-ptrdiff_t.cpp @@ -10,10 +10,10 @@ long *alloc_long() { return rv; } // O32-LABEL: define i32* @_Z10alloc_longv() -// O32: call noalias i8* @_Znwj(i32 signext 4) +// O32: call noalias i8* @_Znwj(i32 zeroext 4) // N32-LABEL: define i32* @_Z10alloc_longv() -// N32: call noalias i8* @_Znwj(i32 signext 4) +// N32: call noalias i8* @_Znwj(i32 zeroext 4) // N64-LABEL: define i64* @_Z10alloc_longv() // N64: call noalias i8* @_Znwm(i64 zeroext 8) @@ -24,10 +24,10 @@ long *alloc_long_array() { } // O32-LABEL: define i32* @_Z16alloc_long_arrayv() -// O32: call noalias i8* @_Znaj(i32 signext 8) +// O32: call noalias i8* @_Znaj(i32 zeroext 8) // N32-LABEL: define i32* @_Z16alloc_long_arrayv() -// N32: call noalias i8* @_Znaj(i32 signext 8) +// N32: call noalias i8* @_Znaj(i32 zeroext 8) // N64-LABEL: define i64* @_Z16alloc_long_arrayv() // N64: call noalias i8* @_Znam(i64 zeroext 16) -- 2.40.0