forked from OSchip/llvm-project
Reverting r272777 because one of the tests
added in the llvm patch is causing an assertion to fail. llvm-svn: 272790
This commit is contained in:
parent
7320b99b2c
commit
d48760da64
|
@ -58,16 +58,14 @@ BUILTIN(__builtin_arm_stcl, "vUIiUIiv*", "")
|
||||||
BUILTIN(__builtin_arm_stc2, "vUIiUIiv*", "")
|
BUILTIN(__builtin_arm_stc2, "vUIiUIiv*", "")
|
||||||
BUILTIN(__builtin_arm_stc2l, "vUIiUIiv*", "")
|
BUILTIN(__builtin_arm_stc2l, "vUIiUIiv*", "")
|
||||||
|
|
||||||
BUILTIN(__builtin_arm_cdp, "vUIiUIiUIiUIiUIiUIi", "")
|
|
||||||
BUILTIN(__builtin_arm_cdp2, "vUIiUIiUIiUIiUIiUIi", "")
|
|
||||||
BUILTIN(__builtin_arm_mcr, "vUIiUIiUiUIiUIiUIi", "")
|
BUILTIN(__builtin_arm_mcr, "vUIiUIiUiUIiUIiUIi", "")
|
||||||
BUILTIN(__builtin_arm_mcr2, "vUIiUIiUiUIiUIiUIi", "")
|
BUILTIN(__builtin_arm_mcr2, "vUIiUIiUiUIiUIiUIi", "")
|
||||||
BUILTIN(__builtin_arm_mrc, "UiUIiUIiUIiUIiUIi", "")
|
BUILTIN(__builtin_arm_mrc, "UiUIiUIiUIiUIiUIi", "")
|
||||||
BUILTIN(__builtin_arm_mrc2, "UiUIiUIiUIiUIiUIi", "")
|
BUILTIN(__builtin_arm_mrc2, "UiUIiUIiUIiUIiUIi", "")
|
||||||
BUILTIN(__builtin_arm_mcrr, "vUIiUIiLLUiUIi", "")
|
BUILTIN(__builtin_arm_cdp, "vUIiUIiUIiUIiUIiUIi", "")
|
||||||
BUILTIN(__builtin_arm_mcrr2, "vUIiUIiLLUiUIi", "")
|
BUILTIN(__builtin_arm_cdp2, "vUIiUIiUIiUIiUIiUIi", "")
|
||||||
BUILTIN(__builtin_arm_mrrc, "LLUiUIiUIiUIi", "")
|
BUILTIN(__builtin_arm_mcrr, "vUIiUIiUiUiUIi", "")
|
||||||
BUILTIN(__builtin_arm_mrrc2, "LLUiUIiUIiUIi", "")
|
BUILTIN(__builtin_arm_mcrr2, "vUIiUIiUiUiUIi", "")
|
||||||
|
|
||||||
// CRC32
|
// CRC32
|
||||||
BUILTIN(__builtin_arm_crc32b, "UiUiUc", "nc")
|
BUILTIN(__builtin_arm_crc32b, "UiUiUc", "nc")
|
||||||
|
|
|
@ -3793,74 +3793,6 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID,
|
||||||
return EmitNounwindRuntimeCall(CGM.CreateRuntimeFunction(FTy, Name), Ops);
|
return EmitNounwindRuntimeCall(CGM.CreateRuntimeFunction(FTy, Name), Ops);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BuiltinID == ARM::BI__builtin_arm_mcrr ||
|
|
||||||
BuiltinID == ARM::BI__builtin_arm_mcrr2) {
|
|
||||||
Function *F;
|
|
||||||
|
|
||||||
switch (BuiltinID) {
|
|
||||||
default: llvm_unreachable("unexpected builtin");
|
|
||||||
case ARM::BI__builtin_arm_mcrr:
|
|
||||||
F = CGM.getIntrinsic(Intrinsic::arm_mcrr);
|
|
||||||
break;
|
|
||||||
case ARM::BI__builtin_arm_mcrr2:
|
|
||||||
F = CGM.getIntrinsic(Intrinsic::arm_mcrr2);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// MCRR{2} instruction has 5 operands but
|
|
||||||
// the intrinsic has 4 because Rt and Rt2
|
|
||||||
// are represented as a single unsigned 64
|
|
||||||
// bit integer in the intrinsic definition
|
|
||||||
// but internally it's represented as 2 32
|
|
||||||
// bit integers.
|
|
||||||
|
|
||||||
Value *Coproc = EmitScalarExpr(E->getArg(0));
|
|
||||||
Value *Opc1 = EmitScalarExpr(E->getArg(1));
|
|
||||||
Value *RtAndRt2 = EmitScalarExpr(E->getArg(2));
|
|
||||||
Value *CRm = EmitScalarExpr(E->getArg(3));
|
|
||||||
|
|
||||||
Value *C1 = llvm::ConstantInt::get(Int64Ty, 32);
|
|
||||||
Value *Rt = Builder.CreateTruncOrBitCast(RtAndRt2, Int32Ty);
|
|
||||||
Value *Rt2 = Builder.CreateLShr(RtAndRt2, C1);
|
|
||||||
Rt2 = Builder.CreateTruncOrBitCast(Rt2, Int32Ty);
|
|
||||||
|
|
||||||
return Builder.CreateCall(F, {Coproc, Opc1, Rt, Rt2, CRm});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (BuiltinID == ARM::BI__builtin_arm_mrrc ||
|
|
||||||
BuiltinID == ARM::BI__builtin_arm_mrrc2) {
|
|
||||||
Function *F;
|
|
||||||
|
|
||||||
switch (BuiltinID) {
|
|
||||||
default: llvm_unreachable("unexpected builtin");
|
|
||||||
case ARM::BI__builtin_arm_mrrc:
|
|
||||||
F = CGM.getIntrinsic(Intrinsic::arm_mrrc);
|
|
||||||
break;
|
|
||||||
case ARM::BI__builtin_arm_mrrc2:
|
|
||||||
F = CGM.getIntrinsic(Intrinsic::arm_mrrc2);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
Value *Coproc = EmitScalarExpr(E->getArg(0));
|
|
||||||
Value *Opc1 = EmitScalarExpr(E->getArg(1));
|
|
||||||
Value *CRm = EmitScalarExpr(E->getArg(2));
|
|
||||||
Value *RtAndRt2 = Builder.CreateCall(F, {Coproc, Opc1, CRm});
|
|
||||||
|
|
||||||
// Returns an unsigned 64 bit integer, represented
|
|
||||||
// as two 32 bit integers.
|
|
||||||
|
|
||||||
Value *Rt = Builder.CreateExtractValue(RtAndRt2, 1);
|
|
||||||
Value *Rt1 = Builder.CreateExtractValue(RtAndRt2, 0);
|
|
||||||
Rt = Builder.CreateZExt(Rt, Int64Ty);
|
|
||||||
Rt1 = Builder.CreateZExt(Rt1, Int64Ty);
|
|
||||||
|
|
||||||
Value *ShiftCast = llvm::ConstantInt::get(Int64Ty, 32);
|
|
||||||
RtAndRt2 = Builder.CreateShl(Rt, ShiftCast, "shl", true);
|
|
||||||
RtAndRt2 = Builder.CreateOr(RtAndRt2, Rt1);
|
|
||||||
|
|
||||||
return Builder.CreateBitCast(RtAndRt2, ConvertType(E->getType()));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (BuiltinID == ARM::BI__builtin_arm_ldrexd ||
|
if (BuiltinID == ARM::BI__builtin_arm_ldrexd ||
|
||||||
((BuiltinID == ARM::BI__builtin_arm_ldrex ||
|
((BuiltinID == ARM::BI__builtin_arm_ldrex ||
|
||||||
BuiltinID == ARM::BI__builtin_arm_ldaex) &&
|
BuiltinID == ARM::BI__builtin_arm_ldaex) &&
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
// RUN: %clang_cc1 -Wall -Werror -triple thumbv7-eabi -target-cpu cortex-a8 -emit-llvm -o - %s | opt -S -mem2reg | FileCheck %s
|
// RUN: %clang_cc1 -Wall -Werror -triple thumbv7-eabi -target-cpu cortex-a8 -emit-llvm -o - %s | opt -S -mem2reg | FileCheck %s
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
void *f0()
|
void *f0()
|
||||||
{
|
{
|
||||||
return __builtin_thread_pointer();
|
return __builtin_thread_pointer();
|
||||||
|
@ -182,28 +180,16 @@ void mcr2(unsigned a) {
|
||||||
__builtin_arm_mcr2(15, 0, a, 13, 0, 3);
|
__builtin_arm_mcr2(15, 0, a, 13, 0, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mcrr(uint64_t a) {
|
void mcrr(unsigned a, unsigned b) {
|
||||||
// CHECK: define void @mcrr(i64 %{{.*}})
|
// CHECK: define void @mcrr(i32 [[A:%.*]], i32 [[B:%.*]])
|
||||||
// CHECK: call void @llvm.arm.mcrr(i32 15, i32 0, i32 %{{[0-9]+}}, i32 %{{[0-9]+}}, i32 0)
|
// CHECK: call void @llvm.arm.mcrr(i32 15, i32 0, i32 [[A]], i32 [[B]], i32 0)
|
||||||
__builtin_arm_mcrr(15, 0, a, 0);
|
__builtin_arm_mcrr(15, 0, a, b, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mcrr2(uint64_t a) {
|
void mcrr2(unsigned a, unsigned b) {
|
||||||
// CHECK: define void @mcrr2(i64 %{{.*}})
|
// CHECK: define void @mcrr2(i32 [[A:%.*]], i32 [[B:%.*]])
|
||||||
// CHECK: call void @llvm.arm.mcrr2(i32 15, i32 0, i32 %{{[0-9]+}}, i32 %{{[0-9]+}}, i32 0)
|
// CHECK: call void @llvm.arm.mcrr2(i32 15, i32 0, i32 [[A]], i32 [[B]], i32 0)
|
||||||
__builtin_arm_mcrr2(15, 0, a, 0);
|
__builtin_arm_mcrr2(15, 0, a, b, 0);
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t mrrc() {
|
|
||||||
// CHECK: define i64 @mrrc()
|
|
||||||
// CHECK: call { i32, i32 } @llvm.arm.mrrc(i32 15, i32 0, i32 0)
|
|
||||||
return __builtin_arm_mrrc(15, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t mrrc2() {
|
|
||||||
// CHECK: define i64 @mrrc2()
|
|
||||||
// CHECK: call { i32, i32 } @llvm.arm.mrrc2(i32 15, i32 0, i32 0)
|
|
||||||
return __builtin_arm_mrrc2(15, 0, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned rsr() {
|
unsigned rsr() {
|
||||||
|
|
|
@ -116,23 +116,11 @@ void test6(int a, int b, int c) {
|
||||||
__builtin_arm_mcr2(15, 0, b, 13, a, 3); // expected-error {{argument to '__builtin_arm_mcr2' must be a constant integer}}
|
__builtin_arm_mcr2(15, 0, b, 13, a, 3); // expected-error {{argument to '__builtin_arm_mcr2' must be a constant integer}}
|
||||||
__builtin_arm_mcr2(15, 0, b, 13, 0, a); // expected-error {{argument to '__builtin_arm_mcr2' must be a constant integer}}
|
__builtin_arm_mcr2(15, 0, b, 13, 0, a); // expected-error {{argument to '__builtin_arm_mcr2' must be a constant integer}}
|
||||||
|
|
||||||
__builtin_arm_mcrr(15, 0, b, 0);
|
__builtin_arm_mcrr( a, 0, b, c, 0); // expected-error {{argument to '__builtin_arm_mcrr' must be a constant integer}}
|
||||||
__builtin_arm_mcrr( a, 0, b, 0); // expected-error {{argument to '__builtin_arm_mcrr' must be a constant integer}}
|
__builtin_arm_mcrr(15, a, b, c, 0); // expected-error {{argument to '__builtin_arm_mcrr' must be a constant integer}}
|
||||||
__builtin_arm_mcrr(15, a, b, 0); // expected-error {{argument to '__builtin_arm_mcrr' must be a constant integer}}
|
__builtin_arm_mcrr(15, 0, b, c, a); // expected-error {{argument to '__builtin_arm_mcrr' must be a constant integer}}
|
||||||
__builtin_arm_mcrr(15, 0, b, a); // expected-error {{argument to '__builtin_arm_mcrr' must be a constant integer}}
|
|
||||||
|
|
||||||
__builtin_arm_mcrr2(15, 0, b, 0);
|
__builtin_arm_mcrr2( a, 0, b, c, 0); // expected-error {{argument to '__builtin_arm_mcrr2' must be a constant integer}}
|
||||||
__builtin_arm_mcrr2( a, 0, b, 0); // expected-error {{argument to '__builtin_arm_mcrr2' must be a constant integer}}
|
__builtin_arm_mcrr2(15, a, b, c, 0); // expected-error {{argument to '__builtin_arm_mcrr2' must be a constant integer}}
|
||||||
__builtin_arm_mcrr2(15, a, b, 0); // expected-error {{argument to '__builtin_arm_mcrr2' must be a constant integer}}
|
__builtin_arm_mcrr2(15, 0, b, c, a); // expected-error {{argument to '__builtin_arm_mcrr2' must be a constant integer}}
|
||||||
__builtin_arm_mcrr2(15, 0, b, a); // expected-error {{argument to '__builtin_arm_mcrr2' must be a constant integer}}
|
|
||||||
|
|
||||||
__builtin_arm_mrrc(15, 0, 0);
|
|
||||||
__builtin_arm_mrrc( a, 0, 0); // expected-error {{argument to '__builtin_arm_mrrc' must be a constant integer}}
|
|
||||||
__builtin_arm_mrrc(15, a, 0); // expected-error {{argument to '__builtin_arm_mrrc' must be a constant integer}}
|
|
||||||
__builtin_arm_mrrc(15, 0, a); // expected-error {{argument to '__builtin_arm_mrrc' must be a constant integer}}
|
|
||||||
|
|
||||||
__builtin_arm_mrrc2(15, 0, 0);
|
|
||||||
__builtin_arm_mrrc2( a, 0, 0); // expected-error {{argument to '__builtin_arm_mrrc2' must be a constant integer}}
|
|
||||||
__builtin_arm_mrrc2(15, a, 0); // expected-error {{argument to '__builtin_arm_mrrc2' must be a constant integer}}
|
|
||||||
__builtin_arm_mrrc2(15, 0, a); // expected-error {{argument to '__builtin_arm_mrrc2' must be a constant integer}}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue