forked from OSchip/llvm-project
test: modernise ARM CodeGen tests
Replace the use of grep with FileCheck. Tidy up some of the tests. A few of the tests have been left as weak as previously, though some have been made more stringent. llvm-svn: 290616
This commit is contained in:
parent
b222549dc5
commit
0ce0dc250c
|
@ -1,52 +1,53 @@
|
|||
; REQUIRES: asserts
|
||||
; RUN: llc < %s -mtriple=arm-apple-darwin -relocation-model=pic \
|
||||
; RUN: -mattr=+v6 | grep r9
|
||||
; RUN: llc < %s -mtriple=arm-apple-darwin -relocation-model=pic \
|
||||
; RUN: -mattr=+v6,+reserve-r9 -ifcvt-limit=0 -stats 2>&1 | grep asm-printer
|
||||
; | grep 35
|
||||
; RUN: llc -mtriple arm-apple-darwin -relocation-model pic -mattr=+v6 -filetype asm -o - %s | FileCheck -check-prefix CHECK-R9 %s
|
||||
; RUN: llc -mtriple arm-apple-darwin -relocation-model pic -mattr=+v6,+reserve-r9 -ifcvt-limit=0 -stats -o /dev/null %s 2>&1 | FileCheck -check-prefix CHECK-ASM-PRINTER %s
|
||||
|
||||
define void @test(i32 %tmp56222, i32 %tmp36224, i32 %tmp46223, i32 %i.0196.0.ph, i32 %tmp8, i32* %tmp1011, i32** %tmp1, i32* %d2.1.out, i32* %d3.1.out, i32* %d0.1.out, i32* %d1.1.out) {
|
||||
newFuncRoot:
|
||||
br label %bb74
|
||||
|
||||
bb78.exitStub: ; preds = %bb74
|
||||
bb78.exitStub:
|
||||
store i32 %d2.1, i32* %d2.1.out
|
||||
store i32 %d3.1, i32* %d3.1.out
|
||||
store i32 %d0.1, i32* %d0.1.out
|
||||
store i32 %d1.1, i32* %d1.1.out
|
||||
ret void
|
||||
|
||||
bb74: ; preds = %bb26, %newFuncRoot
|
||||
%fp.1.rec = phi i32 [ 0, %newFuncRoot ], [ %tmp71.rec, %bb26 ] ; <i32> [#uses=3]
|
||||
%fm.1.in = phi i32* [ %tmp71, %bb26 ], [ %tmp1011, %newFuncRoot ] ; <i32*> [#uses=1]
|
||||
%d0.1 = phi i32 [ %tmp44, %bb26 ], [ 8192, %newFuncRoot ] ; <i32> [#uses=2]
|
||||
%d1.1 = phi i32 [ %tmp54, %bb26 ], [ 8192, %newFuncRoot ] ; <i32> [#uses=2]
|
||||
%d2.1 = phi i32 [ %tmp64, %bb26 ], [ 8192, %newFuncRoot ] ; <i32> [#uses=2]
|
||||
%d3.1 = phi i32 [ %tmp69, %bb26 ], [ 8192, %newFuncRoot ] ; <i32> [#uses=2]
|
||||
%fm.1 = load i32, i32* %fm.1.in ; <i32> [#uses=4]
|
||||
icmp eq i32 %fp.1.rec, %tmp8 ; <i1>:0 [#uses=1]
|
||||
bb74:
|
||||
%fp.1.rec = phi i32 [ 0, %newFuncRoot ], [ %tmp71.rec, %bb26 ]
|
||||
%fm.1.in = phi i32* [ %tmp71, %bb26 ], [ %tmp1011, %newFuncRoot ]
|
||||
%d0.1 = phi i32 [ %tmp44, %bb26 ], [ 8192, %newFuncRoot ]
|
||||
%d1.1 = phi i32 [ %tmp54, %bb26 ], [ 8192, %newFuncRoot ]
|
||||
%d2.1 = phi i32 [ %tmp64, %bb26 ], [ 8192, %newFuncRoot ]
|
||||
%d3.1 = phi i32 [ %tmp69, %bb26 ], [ 8192, %newFuncRoot ]
|
||||
%fm.1 = load i32, i32* %fm.1.in
|
||||
icmp eq i32 %fp.1.rec, %tmp8
|
||||
br i1 %0, label %bb78.exitStub, label %bb26
|
||||
|
||||
bb26: ; preds = %bb74
|
||||
%tmp28 = getelementptr i32*, i32** %tmp1, i32 %fp.1.rec ; <i32**> [#uses=1]
|
||||
%tmp30 = load i32*, i32** %tmp28 ; <i32*> [#uses=4]
|
||||
%tmp33 = getelementptr i32, i32* %tmp30, i32 %i.0196.0.ph ; <i32*> [#uses=1]
|
||||
%tmp34 = load i32, i32* %tmp33 ; <i32> [#uses=1]
|
||||
%tmp38 = getelementptr i32, i32* %tmp30, i32 %tmp36224 ; <i32*> [#uses=1]
|
||||
%tmp39 = load i32, i32* %tmp38 ; <i32> [#uses=1]
|
||||
%tmp42 = mul i32 %tmp34, %fm.1 ; <i32> [#uses=1]
|
||||
%tmp44 = add i32 %tmp42, %d0.1 ; <i32> [#uses=1]
|
||||
%tmp48 = getelementptr i32, i32* %tmp30, i32 %tmp46223 ; <i32*> [#uses=1]
|
||||
%tmp49 = load i32, i32* %tmp48 ; <i32> [#uses=1]
|
||||
%tmp52 = mul i32 %tmp39, %fm.1 ; <i32> [#uses=1]
|
||||
%tmp54 = add i32 %tmp52, %d1.1 ; <i32> [#uses=1]
|
||||
%tmp58 = getelementptr i32, i32* %tmp30, i32 %tmp56222 ; <i32*> [#uses=1]
|
||||
%tmp59 = load i32, i32* %tmp58 ; <i32> [#uses=1]
|
||||
%tmp62 = mul i32 %tmp49, %fm.1 ; <i32> [#uses=1]
|
||||
%tmp64 = add i32 %tmp62, %d2.1 ; <i32> [#uses=1]
|
||||
%tmp67 = mul i32 %tmp59, %fm.1 ; <i32> [#uses=1]
|
||||
%tmp69 = add i32 %tmp67, %d3.1 ; <i32> [#uses=1]
|
||||
%tmp71.rec = add i32 %fp.1.rec, 1 ; <i32> [#uses=2]
|
||||
%tmp71 = getelementptr i32, i32* %tmp1011, i32 %tmp71.rec ; <i32*> [#uses=1]
|
||||
bb26:
|
||||
%tmp28 = getelementptr i32*, i32** %tmp1, i32 %fp.1.rec
|
||||
%tmp30 = load i32*, i32** %tmp28
|
||||
%tmp33 = getelementptr i32, i32* %tmp30, i32 %i.0196.0.ph
|
||||
%tmp34 = load i32, i32* %tmp33
|
||||
%tmp38 = getelementptr i32, i32* %tmp30, i32 %tmp36224
|
||||
%tmp39 = load i32, i32* %tmp38
|
||||
%tmp42 = mul i32 %tmp34, %fm.1
|
||||
%tmp44 = add i32 %tmp42, %d0.1
|
||||
%tmp48 = getelementptr i32, i32* %tmp30, i32 %tmp46223
|
||||
%tmp49 = load i32, i32* %tmp48
|
||||
%tmp52 = mul i32 %tmp39, %fm.1
|
||||
%tmp54 = add i32 %tmp52, %d1.1
|
||||
%tmp58 = getelementptr i32, i32* %tmp30, i32 %tmp56222
|
||||
%tmp59 = load i32, i32* %tmp58
|
||||
%tmp62 = mul i32 %tmp49, %fm.1
|
||||
%tmp64 = add i32 %tmp62, %d2.1
|
||||
%tmp67 = mul i32 %tmp59, %fm.1
|
||||
%tmp69 = add i32 %tmp67, %d3.1
|
||||
%tmp71.rec = add i32 %fp.1.rec, 1
|
||||
%tmp71 = getelementptr i32, i32* %tmp1011, i32 %tmp71.rec
|
||||
br label %bb74
|
||||
}
|
||||
|
||||
; CHECK-R9: r9
|
||||
; CHECK-ASM-PRINTER: asm-printer
|
||||
|
||||
|
|
|
@ -1,16 +1,15 @@
|
|||
; RUN: llc < %s -mtriple=arm-apple-darwin -relocation-model=pic | \
|
||||
; RUN: not grep LPC9
|
||||
; RUN: llc -mtriple arm-apple-darwin -relocation-model pic -filetype asm -o - %s | FileCheck %s
|
||||
|
||||
%struct.B = type { i32 }
|
||||
%struct.anon = type { void (%struct.B*)*, i32 }
|
||||
@str = internal constant [7 x i8] c"i, %d\0A\00" ; <[7 x i8]*> [#uses=1]
|
||||
@str1 = internal constant [7 x i8] c"j, %d\0A\00" ; <[7 x i8]*> [#uses=1]
|
||||
%struct.B = type { i32 }
|
||||
%struct.anon = type { void (%struct.B*)*, i32 }
|
||||
@str = internal constant [7 x i8] c"i, %d\0A\00"
|
||||
@str1 = internal constant [7 x i8] c"j, %d\0A\00"
|
||||
|
||||
define internal void @_ZN1B1iEv(%struct.B* %this) {
|
||||
entry:
|
||||
%tmp1 = getelementptr %struct.B, %struct.B* %this, i32 0, i32 0 ; <i32*> [#uses=1]
|
||||
%tmp2 = load i32, i32* %tmp1 ; <i32> [#uses=1]
|
||||
%tmp4 = tail call i32 (i8*, ...) @printf( i8* getelementptr ([7 x i8], [7 x i8]* @str, i32 0, i32 0), i32 %tmp2 ) ; <i32> [#uses=0]
|
||||
%tmp1 = getelementptr %struct.B, %struct.B* %this, i32 0, i32 0
|
||||
%tmp2 = load i32, i32* %tmp1
|
||||
%tmp4 = tail call i32 (i8*, ...) @printf(i8* getelementptr ([7 x i8], [7 x i8]* @str, i32 0, i32 0), i32 %tmp2)
|
||||
ret void
|
||||
}
|
||||
|
||||
|
@ -18,82 +17,85 @@ declare i32 @printf(i8*, ...)
|
|||
|
||||
define internal void @_ZN1B1jEv(%struct.B* %this) {
|
||||
entry:
|
||||
%tmp1 = getelementptr %struct.B, %struct.B* %this, i32 0, i32 0 ; <i32*> [#uses=1]
|
||||
%tmp2 = load i32, i32* %tmp1 ; <i32> [#uses=1]
|
||||
%tmp4 = tail call i32 (i8*, ...) @printf( i8* getelementptr ([7 x i8], [7 x i8]* @str1, i32 0, i32 0), i32 %tmp2 ) ; <i32> [#uses=0]
|
||||
%tmp1 = getelementptr %struct.B, %struct.B* %this, i32 0, i32 0
|
||||
%tmp2 = load i32, i32* %tmp1
|
||||
%tmp4 = tail call i32 (i8*, ...) @printf(i8* getelementptr ([7 x i8], [7 x i8]* @str1, i32 0, i32 0), i32 %tmp2)
|
||||
ret void
|
||||
}
|
||||
|
||||
define i32 @main() {
|
||||
entry:
|
||||
%b.i29 = alloca %struct.B, align 4 ; <%struct.B*> [#uses=3]
|
||||
%b.i1 = alloca %struct.B, align 4 ; <%struct.B*> [#uses=3]
|
||||
%b.i = alloca %struct.B, align 4 ; <%struct.B*> [#uses=3]
|
||||
%tmp2.i = getelementptr %struct.B, %struct.B* %b.i, i32 0, i32 0 ; <i32*> [#uses=1]
|
||||
%b.i29 = alloca %struct.B, align 4
|
||||
%b.i1 = alloca %struct.B, align 4
|
||||
%b.i = alloca %struct.B, align 4
|
||||
%tmp2.i = getelementptr %struct.B, %struct.B* %b.i, i32 0, i32 0
|
||||
store i32 4, i32* %tmp2.i
|
||||
br i1 icmp eq (i64 and (i64 zext (i32 ptrtoint (void (%struct.B*)* @_ZN1B1iEv to i32) to i64), i64 4294967296), i64 0), label %_Z3fooiM1BFvvE.exit, label %cond_true.i
|
||||
|
||||
cond_true.i: ; preds = %entry
|
||||
%b2.i = bitcast %struct.B* %b.i to i8* ; <i8*> [#uses=1]
|
||||
%ctg23.i = getelementptr i8, i8* %b2.i, i32 ashr (i32 trunc (i64 lshr (i64 zext (i32 ptrtoint (void (%struct.B*)* @_ZN1B1iEv to i32) to i64), i64 32) to i32), i32 1) ; <i8*> [#uses=1]
|
||||
%tmp121314.i = bitcast i8* %ctg23.i to i32 (...)*** ; <i32 (...)***> [#uses=1]
|
||||
%tmp15.i = load i32 (...)**, i32 (...)*** %tmp121314.i ; <i32 (...)**> [#uses=1]
|
||||
%tmp151.i = bitcast i32 (...)** %tmp15.i to i8* ; <i8*> [#uses=1]
|
||||
%ctg2.i = getelementptr i8, i8* %tmp151.i, i32 ptrtoint (void (%struct.B*)* @_ZN1B1iEv to i32) ; <i8*> [#uses=1]
|
||||
%tmp2021.i = bitcast i8* %ctg2.i to i32 (...)** ; <i32 (...)**> [#uses=1]
|
||||
%tmp22.i = load i32 (...)*, i32 (...)** %tmp2021.i ; <i32 (...)*> [#uses=1]
|
||||
%tmp2223.i = bitcast i32 (...)* %tmp22.i to void (%struct.B*)* ; <void (%struct.B*)*> [#uses=1]
|
||||
cond_true.i:
|
||||
%b2.i = bitcast %struct.B* %b.i to i8*
|
||||
%ctg23.i = getelementptr i8, i8* %b2.i, i32 ashr (i32 trunc (i64 lshr (i64 zext (i32 ptrtoint (void (%struct.B*)* @_ZN1B1iEv to i32) to i64), i64 32) to i32), i32 1)
|
||||
%tmp121314.i = bitcast i8* %ctg23.i to i32 (...)***
|
||||
%tmp15.i = load i32 (...)**, i32 (...)*** %tmp121314.i
|
||||
%tmp151.i = bitcast i32 (...)** %tmp15.i to i8*
|
||||
%ctg2.i = getelementptr i8, i8* %tmp151.i, i32 ptrtoint (void (%struct.B*)* @_ZN1B1iEv to i32)
|
||||
%tmp2021.i = bitcast i8* %ctg2.i to i32 (...)**
|
||||
%tmp22.i = load i32 (...)*, i32 (...)** %tmp2021.i
|
||||
%tmp2223.i = bitcast i32 (...)* %tmp22.i to void (%struct.B*)*
|
||||
br label %_Z3fooiM1BFvvE.exit
|
||||
|
||||
_Z3fooiM1BFvvE.exit: ; preds = %cond_true.i, %entry
|
||||
%iftmp.2.0.i = phi void (%struct.B*)* [ %tmp2223.i, %cond_true.i ], [ inttoptr (i32 ptrtoint (void (%struct.B*)* @_ZN1B1iEv to i32) to void (%struct.B*)*), %entry ] ; <void (%struct.B*)*> [#uses=1]
|
||||
%b4.i = bitcast %struct.B* %b.i to i8* ; <i8*> [#uses=1]
|
||||
%ctg25.i = getelementptr i8, i8* %b4.i, i32 ashr (i32 trunc (i64 lshr (i64 zext (i32 ptrtoint (void (%struct.B*)* @_ZN1B1iEv to i32) to i64), i64 32) to i32), i32 1) ; <i8*> [#uses=1]
|
||||
%tmp3031.i = bitcast i8* %ctg25.i to %struct.B* ; <%struct.B*> [#uses=1]
|
||||
call void %iftmp.2.0.i( %struct.B* %tmp3031.i )
|
||||
%tmp2.i30 = getelementptr %struct.B, %struct.B* %b.i29, i32 0, i32 0 ; <i32*> [#uses=1]
|
||||
_Z3fooiM1BFvvE.exit:
|
||||
%iftmp.2.0.i = phi void (%struct.B*)* [ %tmp2223.i, %cond_true.i ], [ inttoptr (i32 ptrtoint (void (%struct.B*)* @_ZN1B1iEv to i32) to void (%struct.B*)*), %entry ]
|
||||
%b4.i = bitcast %struct.B* %b.i to i8*
|
||||
%ctg25.i = getelementptr i8, i8* %b4.i, i32 ashr (i32 trunc (i64 lshr (i64 zext (i32 ptrtoint (void (%struct.B*)* @_ZN1B1iEv to i32) to i64), i64 32) to i32), i32 1)
|
||||
%tmp3031.i = bitcast i8* %ctg25.i to %struct.B*
|
||||
call void %iftmp.2.0.i(%struct.B* %tmp3031.i)
|
||||
%tmp2.i30 = getelementptr %struct.B, %struct.B* %b.i29, i32 0, i32 0
|
||||
store i32 6, i32* %tmp2.i30
|
||||
br i1 icmp eq (i64 and (i64 zext (i32 ptrtoint (void (%struct.B*)* @_ZN1B1jEv to i32) to i64), i64 4294967296), i64 0), label %_Z3fooiM1BFvvE.exit56, label %cond_true.i46
|
||||
|
||||
cond_true.i46: ; preds = %_Z3fooiM1BFvvE.exit
|
||||
%b2.i35 = bitcast %struct.B* %b.i29 to i8* ; <i8*> [#uses=1]
|
||||
%ctg23.i36 = getelementptr i8, i8* %b2.i35, i32 ashr (i32 trunc (i64 lshr (i64 zext (i32 ptrtoint (void (%struct.B*)* @_ZN1B1jEv to i32) to i64), i64 32) to i32), i32 1) ; <i8*> [#uses=1]
|
||||
%tmp121314.i37 = bitcast i8* %ctg23.i36 to i32 (...)*** ; <i32 (...)***> [#uses=1]
|
||||
%tmp15.i38 = load i32 (...)**, i32 (...)*** %tmp121314.i37 ; <i32 (...)**> [#uses=1]
|
||||
%tmp151.i41 = bitcast i32 (...)** %tmp15.i38 to i8* ; <i8*> [#uses=1]
|
||||
%ctg2.i42 = getelementptr i8, i8* %tmp151.i41, i32 ptrtoint (void (%struct.B*)* @_ZN1B1jEv to i32) ; <i8*> [#uses=1]
|
||||
%tmp2021.i43 = bitcast i8* %ctg2.i42 to i32 (...)** ; <i32 (...)**> [#uses=1]
|
||||
%tmp22.i44 = load i32 (...)*, i32 (...)** %tmp2021.i43 ; <i32 (...)*> [#uses=1]
|
||||
%tmp2223.i45 = bitcast i32 (...)* %tmp22.i44 to void (%struct.B*)* ; <void (%struct.B*)*> [#uses=1]
|
||||
cond_true.i46:
|
||||
%b2.i35 = bitcast %struct.B* %b.i29 to i8*
|
||||
%ctg23.i36 = getelementptr i8, i8* %b2.i35, i32 ashr (i32 trunc (i64 lshr (i64 zext (i32 ptrtoint (void (%struct.B*)* @_ZN1B1jEv to i32) to i64), i64 32) to i32), i32 1)
|
||||
%tmp121314.i37 = bitcast i8* %ctg23.i36 to i32 (...)***
|
||||
%tmp15.i38 = load i32 (...)**, i32 (...)*** %tmp121314.i37
|
||||
%tmp151.i41 = bitcast i32 (...)** %tmp15.i38 to i8*
|
||||
%ctg2.i42 = getelementptr i8, i8* %tmp151.i41, i32 ptrtoint (void (%struct.B*)* @_ZN1B1jEv to i32)
|
||||
%tmp2021.i43 = bitcast i8* %ctg2.i42 to i32 (...)**
|
||||
%tmp22.i44 = load i32 (...)*, i32 (...)** %tmp2021.i43
|
||||
%tmp2223.i45 = bitcast i32 (...)* %tmp22.i44 to void (%struct.B*)*
|
||||
br label %_Z3fooiM1BFvvE.exit56
|
||||
|
||||
_Z3fooiM1BFvvE.exit56: ; preds = %cond_true.i46, %_Z3fooiM1BFvvE.exit
|
||||
%iftmp.2.0.i49 = phi void (%struct.B*)* [ %tmp2223.i45, %cond_true.i46 ], [ inttoptr (i32 ptrtoint (void (%struct.B*)* @_ZN1B1jEv to i32) to void (%struct.B*)*), %_Z3fooiM1BFvvE.exit ] ; <void (%struct.B*)*> [#uses=1]
|
||||
%b4.i53 = bitcast %struct.B* %b.i29 to i8* ; <i8*> [#uses=1]
|
||||
%ctg25.i54 = getelementptr i8, i8* %b4.i53, i32 ashr (i32 trunc (i64 lshr (i64 zext (i32 ptrtoint (void (%struct.B*)* @_ZN1B1jEv to i32) to i64), i64 32) to i32), i32 1) ; <i8*> [#uses=1]
|
||||
%tmp3031.i55 = bitcast i8* %ctg25.i54 to %struct.B* ; <%struct.B*> [#uses=1]
|
||||
call void %iftmp.2.0.i49( %struct.B* %tmp3031.i55 )
|
||||
%tmp2.i2 = getelementptr %struct.B, %struct.B* %b.i1, i32 0, i32 0 ; <i32*> [#uses=1]
|
||||
_Z3fooiM1BFvvE.exit56:
|
||||
%iftmp.2.0.i49 = phi void (%struct.B*)* [ %tmp2223.i45, %cond_true.i46 ], [ inttoptr (i32 ptrtoint (void (%struct.B*)* @_ZN1B1jEv to i32) to void (%struct.B*)*), %_Z3fooiM1BFvvE.exit ]
|
||||
%b4.i53 = bitcast %struct.B* %b.i29 to i8*
|
||||
%ctg25.i54 = getelementptr i8, i8* %b4.i53, i32 ashr (i32 trunc (i64 lshr (i64 zext (i32 ptrtoint (void (%struct.B*)* @_ZN1B1jEv to i32) to i64), i64 32) to i32), i32 1)
|
||||
%tmp3031.i55 = bitcast i8* %ctg25.i54 to %struct.B*
|
||||
call void %iftmp.2.0.i49(%struct.B* %tmp3031.i55)
|
||||
%tmp2.i2 = getelementptr %struct.B, %struct.B* %b.i1, i32 0, i32 0
|
||||
store i32 -1, i32* %tmp2.i2
|
||||
br i1 icmp eq (i64 and (i64 zext (i32 ptrtoint (void (%struct.B*)* @_ZN1B1iEv to i32) to i64), i64 4294967296), i64 0), label %_Z3fooiM1BFvvE.exit28, label %cond_true.i18
|
||||
|
||||
cond_true.i18: ; preds = %_Z3fooiM1BFvvE.exit56
|
||||
%b2.i7 = bitcast %struct.B* %b.i1 to i8* ; <i8*> [#uses=1]
|
||||
%ctg23.i8 = getelementptr i8, i8* %b2.i7, i32 ashr (i32 trunc (i64 lshr (i64 zext (i32 ptrtoint (void (%struct.B*)* @_ZN1B1iEv to i32) to i64), i64 32) to i32), i32 1) ; <i8*> [#uses=1]
|
||||
%tmp121314.i9 = bitcast i8* %ctg23.i8 to i32 (...)*** ; <i32 (...)***> [#uses=1]
|
||||
%tmp15.i10 = load i32 (...)**, i32 (...)*** %tmp121314.i9 ; <i32 (...)**> [#uses=1]
|
||||
%tmp151.i13 = bitcast i32 (...)** %tmp15.i10 to i8* ; <i8*> [#uses=1]
|
||||
%ctg2.i14 = getelementptr i8, i8* %tmp151.i13, i32 ptrtoint (void (%struct.B*)* @_ZN1B1iEv to i32) ; <i8*> [#uses=1]
|
||||
%tmp2021.i15 = bitcast i8* %ctg2.i14 to i32 (...)** ; <i32 (...)**> [#uses=1]
|
||||
%tmp22.i16 = load i32 (...)*, i32 (...)** %tmp2021.i15 ; <i32 (...)*> [#uses=1]
|
||||
%tmp2223.i17 = bitcast i32 (...)* %tmp22.i16 to void (%struct.B*)* ; <void (%struct.B*)*> [#uses=1]
|
||||
cond_true.i18:
|
||||
%b2.i7 = bitcast %struct.B* %b.i1 to i8*
|
||||
%ctg23.i8 = getelementptr i8, i8* %b2.i7, i32 ashr (i32 trunc (i64 lshr (i64 zext (i32 ptrtoint (void (%struct.B*)* @_ZN1B1iEv to i32) to i64), i64 32) to i32), i32 1)
|
||||
%tmp121314.i9 = bitcast i8* %ctg23.i8 to i32 (...)***
|
||||
%tmp15.i10 = load i32 (...)**, i32 (...)*** %tmp121314.i9
|
||||
%tmp151.i13 = bitcast i32 (...)** %tmp15.i10 to i8*
|
||||
%ctg2.i14 = getelementptr i8, i8* %tmp151.i13, i32 ptrtoint (void (%struct.B*)* @_ZN1B1iEv to i32)
|
||||
%tmp2021.i15 = bitcast i8* %ctg2.i14 to i32 (...)**
|
||||
%tmp22.i16 = load i32 (...)*, i32 (...)** %tmp2021.i15
|
||||
%tmp2223.i17 = bitcast i32 (...)* %tmp22.i16 to void (%struct.B*)*
|
||||
br label %_Z3fooiM1BFvvE.exit28
|
||||
|
||||
_Z3fooiM1BFvvE.exit28: ; preds = %cond_true.i18, %_Z3fooiM1BFvvE.exit56
|
||||
%iftmp.2.0.i21 = phi void (%struct.B*)* [ %tmp2223.i17, %cond_true.i18 ], [ inttoptr (i32 ptrtoint (void (%struct.B*)* @_ZN1B1iEv to i32) to void (%struct.B*)*), %_Z3fooiM1BFvvE.exit56 ] ; <void (%struct.B*)*> [#uses=1]
|
||||
%b4.i25 = bitcast %struct.B* %b.i1 to i8* ; <i8*> [#uses=1]
|
||||
%ctg25.i26 = getelementptr i8, i8* %b4.i25, i32 ashr (i32 trunc (i64 lshr (i64 zext (i32 ptrtoint (void (%struct.B*)* @_ZN1B1iEv to i32) to i64), i64 32) to i32), i32 1) ; <i8*> [#uses=1]
|
||||
%tmp3031.i27 = bitcast i8* %ctg25.i26 to %struct.B* ; <%struct.B*> [#uses=1]
|
||||
call void %iftmp.2.0.i21( %struct.B* %tmp3031.i27 )
|
||||
_Z3fooiM1BFvvE.exit28:
|
||||
%iftmp.2.0.i21 = phi void (%struct.B*)* [ %tmp2223.i17, %cond_true.i18 ], [ inttoptr (i32 ptrtoint (void (%struct.B*)* @_ZN1B1iEv to i32) to void (%struct.B*)*), %_Z3fooiM1BFvvE.exit56 ]
|
||||
%b4.i25 = bitcast %struct.B* %b.i1 to i8*
|
||||
%ctg25.i26 = getelementptr i8, i8* %b4.i25, i32 ashr (i32 trunc (i64 lshr (i64 zext (i32 ptrtoint (void (%struct.B*)* @_ZN1B1iEv to i32) to i64), i64 32) to i32), i32 1)
|
||||
%tmp3031.i27 = bitcast i8* %ctg25.i26 to %struct.B*
|
||||
call void %iftmp.2.0.i21(%struct.B* %tmp3031.i27)
|
||||
ret i32 0
|
||||
}
|
||||
|
||||
; CHECK-NOT: LPC9
|
||||
|
||||
|
|
|
@ -1,13 +1,16 @@
|
|||
; RUN: llc < %s -mtriple=arm-apple-darwin -mattr=+v6 -relocation-model=pic | grep comm
|
||||
; RUN: llc -mtriple arm-apple-darwin -mattr=+v6 -relocation-model pic -filetype asm -o - %s | FileCheck %s
|
||||
|
||||
%struct.FILE = type { i8*, i32, i32, i16, i16, %struct.__sbuf, i32, i8*, i32 (i8*)*, i32 (i8*, i8*, i32)*, i64 (i8*, i64, i32)*, i32 (i8*, i8*, i32)*, %struct.__sbuf, %struct.__sFILEX*, i32, [3 x i8], [1 x i8], %struct.__sbuf, i32, i64 }
|
||||
%struct.__gcov_var = type { %struct.FILE*, i32, i32, i32, i32, i32, i32, [1025 x i32] }
|
||||
%struct.__sFILEX = type opaque
|
||||
%struct.__sbuf = type { i8*, i32 }
|
||||
@__gcov_var = common global %struct.__gcov_var zeroinitializer ; <%struct.__gcov_var*> [#uses=1]
|
||||
%struct.FILE = type { i8*, i32, i32, i16, i16, %struct.__sbuf, i32, i8*, i32 (i8*)*, i32 (i8*, i8*, i32)*, i64 (i8*, i64, i32)*, i32 (i8*, i8*, i32)*, %struct.__sbuf, %struct.__sFILEX*, i32, [3 x i8], [1 x i8], %struct.__sbuf, i32, i64 }
|
||||
%struct.__gcov_var = type { %struct.FILE*, i32, i32, i32, i32, i32, i32, [1025 x i32] }
|
||||
%struct.__sFILEX = type opaque
|
||||
%struct.__sbuf = type { i8*, i32 }
|
||||
@__gcov_var = common global %struct.__gcov_var zeroinitializer
|
||||
|
||||
define i32 @__gcov_close() nounwind {
|
||||
entry:
|
||||
load i32, i32* getelementptr (%struct.__gcov_var, %struct.__gcov_var* @__gcov_var, i32 0, i32 5), align 4 ; <i32>:0 [#uses=1]
|
||||
load i32, i32* getelementptr (%struct.__gcov_var, %struct.__gcov_var* @__gcov_var, i32 0, i32 5), align 4
|
||||
ret i32 %0
|
||||
}
|
||||
|
||||
; CHECK: comm
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,4 +1,5 @@
|
|||
; RUN: llc < %s -mattr=+neon | not grep fldmfdd
|
||||
; RUN: llc -mtriple thumbv7---elf -mattr=+neon -filetype asm -o - %s | FileCheck %s
|
||||
|
||||
target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:64:64-v128:128:128-a0:0:32"
|
||||
target triple = "thumbv7-elf"
|
||||
|
||||
|
@ -12,16 +13,19 @@ declare <2 x i32> @llvm.arm.neon.vpadd.v2i32(<2 x i32>, <2 x i32>) nounwind read
|
|||
|
||||
define void @_ZN6squish10ClusterFit9Compress3EPv(%quuz* %this, i8* %block) {
|
||||
entry:
|
||||
%0 = lshr <4 x i32> zeroinitializer, <i32 31, i32 31, i32 31, i32 31> ; <<4 x i32>> [#uses=1]
|
||||
%1 = shufflevector <4 x i32> %0, <4 x i32> undef, <2 x i32> <i32 2, i32 3> ; <<2 x i32>> [#uses=1]
|
||||
%2 = call <2 x i32> @llvm.arm.neon.vpadd.v2i32(<2 x i32> undef, <2 x i32> %1) nounwind ; <<2 x i32>> [#uses=1]
|
||||
%3 = extractelement <2 x i32> %2, i32 0 ; <i32> [#uses=1]
|
||||
%not..i = icmp eq i32 %3, undef ; <i1> [#uses=1]
|
||||
%0 = lshr <4 x i32> zeroinitializer, <i32 31, i32 31, i32 31, i32 31>
|
||||
%1 = shufflevector <4 x i32> %0, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
|
||||
%2 = call <2 x i32> @llvm.arm.neon.vpadd.v2i32(<2 x i32> undef, <2 x i32> %1) nounwind
|
||||
%3 = extractelement <2 x i32> %2, i32 0
|
||||
%not..i = icmp eq i32 %3, undef
|
||||
br i1 %not..i, label %return, label %bb221
|
||||
|
||||
bb221: ; preds = %bb221, %entry
|
||||
bb221:
|
||||
br label %bb221
|
||||
|
||||
return: ; preds = %entry
|
||||
return:
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK-NOT: fldmfdd
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
; RUN: llc < %s -mattr=+neon | not grep fldmfdd
|
||||
; RUN: llc -mtriple thumbv7---elf -mattr=+neon -filetype asm -o - %s | FileCheck %s
|
||||
|
||||
target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:64:64-v128:128:128-a0:0:32"
|
||||
target triple = "thumbv7-elf"
|
||||
|
||||
|
@ -12,24 +13,27 @@ define void @aaaa(%quuz* %this, i8* %block) {
|
|||
entry:
|
||||
br i1 undef, label %bb.nph269, label %bb201
|
||||
|
||||
bb.nph269: ; preds = %entry
|
||||
bb.nph269:
|
||||
br label %bb12
|
||||
|
||||
bb12: ; preds = %bb194, %bb.nph269
|
||||
%0 = fmul <4 x float> undef, undef ; <<4 x float>> [#uses=1]
|
||||
%1 = shufflevector <4 x float> %0, <4 x float> undef, <2 x i32> <i32 2, i32 3> ; <<2 x float>> [#uses=1]
|
||||
%2 = shufflevector <2 x float> %1, <2 x float> undef, <4 x i32> zeroinitializer ; <<4 x float>> [#uses=1]
|
||||
%3 = fadd <4 x float> undef, %2 ; <<4 x float>> [#uses=1]
|
||||
bb12:
|
||||
%0 = fmul <4 x float> undef, undef
|
||||
%1 = shufflevector <4 x float> %0, <4 x float> undef, <2 x i32> <i32 2, i32 3>
|
||||
%2 = shufflevector <2 x float> %1, <2 x float> undef, <4 x i32> zeroinitializer
|
||||
%3 = fadd <4 x float> undef, %2
|
||||
br i1 undef, label %bb194, label %bb186
|
||||
|
||||
bb186: ; preds = %bb12
|
||||
bb186:
|
||||
br label %bb194
|
||||
|
||||
bb194: ; preds = %bb186, %bb12
|
||||
%besterror.0.0 = phi <4 x float> [ %3, %bb186 ], [ undef, %bb12 ] ; <<4 x float>> [#uses=0]
|
||||
%indvar.next294 = add i32 undef, 1 ; <i32> [#uses=0]
|
||||
bb194:
|
||||
%besterror.0.0 = phi <4 x float> [ %3, %bb186 ], [ undef, %bb12 ]
|
||||
%indvar.next294 = add i32 undef, 1
|
||||
br label %bb12
|
||||
|
||||
bb201: ; preds = %entry
|
||||
bb201:
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK-NOT: fldmfdd
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
; RUN: llc -O0 -mtriple=arm-apple-darwin < %s | grep DW_OP_breg
|
||||
; RUN: llc -mtriple arm-apple-darwin -O0 -filetype asm -o - %s | FileCheck %s
|
||||
; Use DW_OP_breg in variable's location expression if the variable is in a stack slot.
|
||||
|
||||
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:64:64-v128:128:128-a0:0:64"
|
||||
|
@ -8,43 +8,43 @@ target triple = "arm-apple-darwin"
|
|||
|
||||
define i32 @_Z3fooi4SVal(i32 %i, %struct.SVal* noalias %location) nounwind ssp !dbg !17 {
|
||||
entry:
|
||||
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
|
||||
%"alloca point" = bitcast i32 0 to i32
|
||||
call void @llvm.dbg.value(metadata i32 %i, i64 0, metadata !23, metadata !DIExpression()), !dbg !24
|
||||
call void @llvm.dbg.value(metadata %struct.SVal* %location, i64 0, metadata !25, metadata !DIExpression()), !dbg !24
|
||||
%0 = icmp ne i32 %i, 0, !dbg !27 ; <i1> [#uses=1]
|
||||
%0 = icmp ne i32 %i, 0, !dbg !27
|
||||
br i1 %0, label %bb, label %bb1, !dbg !27
|
||||
|
||||
bb: ; preds = %entry
|
||||
%1 = getelementptr inbounds %struct.SVal, %struct.SVal* %location, i32 0, i32 1, !dbg !29 ; <i32*> [#uses=1]
|
||||
%2 = load i32, i32* %1, align 8, !dbg !29 ; <i32> [#uses=1]
|
||||
%3 = add i32 %2, %i, !dbg !29 ; <i32> [#uses=1]
|
||||
bb:
|
||||
%1 = getelementptr inbounds %struct.SVal, %struct.SVal* %location, i32 0, i32 1, !dbg !29
|
||||
%2 = load i32, i32* %1, align 8, !dbg !29
|
||||
%3 = add i32 %2, %i, !dbg !29
|
||||
br label %bb2, !dbg !29
|
||||
|
||||
bb1: ; preds = %entry
|
||||
%4 = getelementptr inbounds %struct.SVal, %struct.SVal* %location, i32 0, i32 1, !dbg !30 ; <i32*> [#uses=1]
|
||||
%5 = load i32, i32* %4, align 8, !dbg !30 ; <i32> [#uses=1]
|
||||
%6 = sub i32 %5, 1, !dbg !30 ; <i32> [#uses=1]
|
||||
bb1:
|
||||
%4 = getelementptr inbounds %struct.SVal, %struct.SVal* %location, i32 0, i32 1, !dbg !30
|
||||
%5 = load i32, i32* %4, align 8, !dbg !30
|
||||
%6 = sub i32 %5, 1, !dbg !30
|
||||
br label %bb2, !dbg !30
|
||||
|
||||
bb2: ; preds = %bb1, %bb
|
||||
%.0 = phi i32 [ %3, %bb ], [ %6, %bb1 ] ; <i32> [#uses=1]
|
||||
bb2:
|
||||
%.0 = phi i32 [ %3, %bb ], [ %6, %bb1 ]
|
||||
br label %return, !dbg !29
|
||||
|
||||
return: ; preds = %bb2
|
||||
return:
|
||||
ret i32 %.0, !dbg !29
|
||||
}
|
||||
|
||||
define linkonce_odr void @_ZN4SValC1Ev(%struct.SVal* %this) nounwind ssp align 2 !dbg !16 {
|
||||
entry:
|
||||
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
|
||||
%"alloca point" = bitcast i32 0 to i32
|
||||
call void @llvm.dbg.value(metadata %struct.SVal* %this, i64 0, metadata !31, metadata !DIExpression()), !dbg !34
|
||||
%0 = getelementptr inbounds %struct.SVal, %struct.SVal* %this, i32 0, i32 0, !dbg !34 ; <i8**> [#uses=1]
|
||||
%0 = getelementptr inbounds %struct.SVal, %struct.SVal* %this, i32 0, i32 0, !dbg !34
|
||||
store i8* null, i8** %0, align 8, !dbg !34
|
||||
%1 = getelementptr inbounds %struct.SVal, %struct.SVal* %this, i32 0, i32 1, !dbg !34 ; <i32*> [#uses=1]
|
||||
%1 = getelementptr inbounds %struct.SVal, %struct.SVal* %this, i32 0, i32 1, !dbg !34
|
||||
store i32 0, i32* %1, align 8, !dbg !34
|
||||
br label %return, !dbg !34
|
||||
|
||||
return: ; preds = %entry
|
||||
return:
|
||||
ret void, !dbg !35
|
||||
}
|
||||
|
||||
|
@ -52,26 +52,26 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone
|
|||
|
||||
define i32 @main() nounwind ssp !dbg !20 {
|
||||
entry:
|
||||
%0 = alloca %struct.SVal ; <%struct.SVal*> [#uses=3]
|
||||
%v = alloca %struct.SVal ; <%struct.SVal*> [#uses=4]
|
||||
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
|
||||
%0 = alloca %struct.SVal
|
||||
%v = alloca %struct.SVal
|
||||
%"alloca point" = bitcast i32 0 to i32
|
||||
call void @llvm.dbg.declare(metadata %struct.SVal* %v, metadata !38, metadata !DIExpression()), !dbg !41
|
||||
call void @_ZN4SValC1Ev(%struct.SVal* %v) nounwind, !dbg !41
|
||||
%1 = getelementptr inbounds %struct.SVal, %struct.SVal* %v, i32 0, i32 1, !dbg !42 ; <i32*> [#uses=1]
|
||||
%1 = getelementptr inbounds %struct.SVal, %struct.SVal* %v, i32 0, i32 1, !dbg !42
|
||||
store i32 1, i32* %1, align 8, !dbg !42
|
||||
%2 = getelementptr inbounds %struct.SVal, %struct.SVal* %0, i32 0, i32 0, !dbg !43 ; <i8**> [#uses=1]
|
||||
%3 = getelementptr inbounds %struct.SVal, %struct.SVal* %v, i32 0, i32 0, !dbg !43 ; <i8**> [#uses=1]
|
||||
%4 = load i8*, i8** %3, align 8, !dbg !43 ; <i8*> [#uses=1]
|
||||
%2 = getelementptr inbounds %struct.SVal, %struct.SVal* %0, i32 0, i32 0, !dbg !43
|
||||
%3 = getelementptr inbounds %struct.SVal, %struct.SVal* %v, i32 0, i32 0, !dbg !43
|
||||
%4 = load i8*, i8** %3, align 8, !dbg !43
|
||||
store i8* %4, i8** %2, align 8, !dbg !43
|
||||
%5 = getelementptr inbounds %struct.SVal, %struct.SVal* %0, i32 0, i32 1, !dbg !43 ; <i32*> [#uses=1]
|
||||
%6 = getelementptr inbounds %struct.SVal, %struct.SVal* %v, i32 0, i32 1, !dbg !43 ; <i32*> [#uses=1]
|
||||
%7 = load i32, i32* %6, align 8, !dbg !43 ; <i32> [#uses=1]
|
||||
%5 = getelementptr inbounds %struct.SVal, %struct.SVal* %0, i32 0, i32 1, !dbg !43
|
||||
%6 = getelementptr inbounds %struct.SVal, %struct.SVal* %v, i32 0, i32 1, !dbg !43
|
||||
%7 = load i32, i32* %6, align 8, !dbg !43
|
||||
store i32 %7, i32* %5, align 8, !dbg !43
|
||||
%8 = call i32 @_Z3fooi4SVal(i32 2, %struct.SVal* noalias %0) nounwind, !dbg !43 ; <i32> [#uses=0]
|
||||
%8 = call i32 @_Z3fooi4SVal(i32 2, %struct.SVal* noalias %0) nounwind, !dbg !43
|
||||
call void @llvm.dbg.value(metadata i32 %8, i64 0, metadata !44, metadata !DIExpression()), !dbg !43
|
||||
br label %return, !dbg !45
|
||||
|
||||
return: ; preds = %entry
|
||||
return:
|
||||
ret i32 0, !dbg !45
|
||||
}
|
||||
|
||||
|
@ -129,3 +129,6 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) nounwind readnon
|
|||
!47 = !{}
|
||||
!48 = !DIFile(filename: "small.cc", directory: "/Users/manav/R8248330")
|
||||
!49 = !{i32 1, !"Debug Info Version", i32 3}
|
||||
|
||||
; CHECK: @ DW_OP_breg
|
||||
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
; RUN: llc < %s -mtriple=arm-linux-gnueabi | not grep r3
|
||||
; RUN: llc -mtriple arm-linux-gnueabi -filetype asm -o - %s | FileCheck %s
|
||||
; PR4059
|
||||
|
||||
declare i32 @g(double)
|
||||
|
||||
define i32 @f(i64 %z, i32 %a, double %b) {
|
||||
%tmp = call i32 @g(double %b)
|
||||
ret i32 %tmp
|
||||
}
|
||||
|
||||
declare i32 @g(double)
|
||||
; CHECK-NOT: r3
|
||||
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
; RUN: llc < %s -mtriple=arm-linux-gnueabi | not grep r3
|
||||
; RUN: llc -mtriple arm-linux-gnueabi -filetype asm -o - %s | FileCheck %s
|
||||
; PR4058
|
||||
|
||||
declare i32 @g(i64)
|
||||
|
||||
define i32 @f(i64 %z, i32 %a, i64 %b) {
|
||||
%tmp = call i32 @g(i64 %b)
|
||||
ret i32 %tmp
|
||||
}
|
||||
|
||||
declare i32 @g(i64)
|
||||
; CHECK-NOT: r3
|
||||
|
||||
|
|
|
@ -1,16 +1,21 @@
|
|||
; RUN: llc < %s -mtriple=arm-apple-darwin | grep moveq
|
||||
; RUN: llc < %s -mtriple=armv7-apple-darwin -mcpu=cortex-a8 | FileCheck %s
|
||||
; RUN: llc -mtriple arm-apple-darwin -filetype asm -o - %s | FileCheck -check-prefix CHECK-ARMv4 %s
|
||||
; RUN: llc -mtriple armv7-apple-darwin -mcpu=cortex-a8 -filetype asm -o - %s | FileCheck -check-prefix CHECK-ARMv7 %s
|
||||
|
||||
define i32 @f7(float %a, float %b) {
|
||||
entry:
|
||||
; CHECK-LABEL: f7:
|
||||
; CHECK: vcmpe.f32
|
||||
; CHECK: vmrs APSR_nzcv, fpscr
|
||||
; CHECK: movweq
|
||||
; CHECK-NOT: vmrs
|
||||
; CHECK: movwvs
|
||||
%tmp = fcmp ueq float %a,%b
|
||||
%retval = select i1 %tmp, i32 666, i32 42
|
||||
ret i32 %retval
|
||||
}
|
||||
|
||||
; CHECK-ARMv4-LABEL: f7:
|
||||
; CHECK-ARMv4: moveq r6, #1
|
||||
; CHECK-ARMv4: moveq r0, #42
|
||||
|
||||
; CHECK-ARMv7-LABEL: f7:
|
||||
; CHECK-ARMv7: vcmpe.f32
|
||||
; CHECK-ARMv7: vmrs APSR_nzcv, fpscr
|
||||
; CHECK-ARMv7: movweq
|
||||
; CHECK-ARMv7-NOT: vmrs
|
||||
; CHECK-ARMv7: movwvs
|
||||
|
||||
|
|
|
@ -1,15 +1,17 @@
|
|||
; RUN: llc < %s -mtriple=arm-linux-gnueabi | grep powidf2
|
||||
; RUN: llc -mtriple arm-unknown-linux-gnueabi -filetype asm -o - %s | FileCheck %s
|
||||
; PR1287
|
||||
|
||||
; ModuleID = '<stdin>'
|
||||
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64"
|
||||
target triple = "arm-unknown-linux-gnueabi"
|
||||
|
||||
declare double @llvm.powi.f64(double, i32)
|
||||
|
||||
define double @_ZSt3powdi(double %__x, i32 %__i) {
|
||||
entry:
|
||||
%tmp3 = call double @llvm.powi.f64( double %__x, i32 %__i )
|
||||
%tmp3 = call double @llvm.powi.f64(double %__x, i32 %__i)
|
||||
ret double %tmp3
|
||||
}
|
||||
|
||||
declare double @llvm.powi.f64(double, i32)
|
||||
; CHECK: bl __powidf2
|
||||
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
; RUN: llc < %s -march=arm -mtriple=arm-linux-gnueabi | \
|
||||
; RUN: grep "__aeabi_read_tp"
|
||||
; RUN: llc -mtriple arm-linux-gnueabi -filetype asm -o - %s | FileCheck %s
|
||||
|
||||
declare i8* @llvm.thread.pointer()
|
||||
|
||||
define i8* @test() {
|
||||
entry:
|
||||
%tmp1 = call i8* @llvm.thread.pointer( ) ; <i8*> [#uses=0]
|
||||
%tmp1 = call i8* @llvm.thread.pointer()
|
||||
ret i8* %tmp1
|
||||
}
|
||||
|
||||
declare i8* @llvm.thread.pointer()
|
||||
; CHECK: bl __aeabi_read_tp
|
||||
|
||||
|
|
|
@ -1,16 +1,12 @@
|
|||
; RUN: llc < %s -march=arm -mtriple=arm-linux-gnueabi | \
|
||||
; RUN: grep "tbss"
|
||||
; RUN: llc < %s -march=arm -mtriple=arm-linux-gnueabi | \
|
||||
; RUN: FileCheck %s -check-prefix=CHECK -check-prefix=NOEMU
|
||||
; RUN: llc < %s -emulated-tls -march=arm -mtriple=arm-linux-gnueabi | \
|
||||
; RUN: FileCheck %s -check-prefix=CHECK -check-prefix=EMU
|
||||
; RUN: llc -mtriple arm-linux-gnueabi -filetype asm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix NOEMU
|
||||
; RUN: llc -mtriple arm-linux-gnueabi -emulated-tls -filetype asm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix EMU
|
||||
|
||||
%struct.anon = type { i32, i32 }
|
||||
@teste = internal thread_local global %struct.anon zeroinitializer ; <%struct.anon*> [#uses=1]
|
||||
@teste = internal thread_local global %struct.anon zeroinitializer
|
||||
|
||||
define i32 @main() {
|
||||
entry:
|
||||
%tmp2 = load i32, i32* getelementptr (%struct.anon, %struct.anon* @teste, i32 0, i32 0), align 8 ; <i32> [#uses=1]
|
||||
%tmp2 = load i32, i32* getelementptr (%struct.anon, %struct.anon* @teste, i32 0, i32 0), align 8
|
||||
ret i32 %tmp2
|
||||
}
|
||||
|
||||
|
@ -32,3 +28,4 @@ entry:
|
|||
|
||||
; CHECK-NOT: teste:
|
||||
; CHECK-NOT: __emutls_t.teste
|
||||
|
||||
|
|
|
@ -1,74 +1,104 @@
|
|||
; RUN: llc < %s -mtriple=armv6-apple-darwin | \
|
||||
; RUN: grep uxt | count 10
|
||||
; RUN: llc -mtriple armv6-apple-darwin -filetype asm -o - %s | FileCheck %s
|
||||
|
||||
define i32 @test1(i32 %x) {
|
||||
%tmp1 = and i32 %x, 16711935 ; <i32> [#uses=1]
|
||||
%tmp1 = and i32 %x, 16711935
|
||||
ret i32 %tmp1
|
||||
}
|
||||
|
||||
; CHECK-LABEL: test1:
|
||||
; CHECK: uxt
|
||||
|
||||
define i32 @test2(i32 %x) {
|
||||
%tmp1 = lshr i32 %x, 8 ; <i32> [#uses=1]
|
||||
%tmp2 = and i32 %tmp1, 16711935 ; <i32> [#uses=1]
|
||||
%tmp1 = lshr i32 %x, 8
|
||||
%tmp2 = and i32 %tmp1, 16711935
|
||||
ret i32 %tmp2
|
||||
}
|
||||
|
||||
; CHECK-LABEL: test2:
|
||||
; CHECK: uxt
|
||||
|
||||
define i32 @test3(i32 %x) {
|
||||
%tmp1 = lshr i32 %x, 8 ; <i32> [#uses=1]
|
||||
%tmp2 = and i32 %tmp1, 16711935 ; <i32> [#uses=1]
|
||||
%tmp1 = lshr i32 %x, 8
|
||||
%tmp2 = and i32 %tmp1, 16711935
|
||||
ret i32 %tmp2
|
||||
}
|
||||
|
||||
; CHECK-LABEL: test3:
|
||||
; CHECK: uxt
|
||||
|
||||
define i32 @test4(i32 %x) {
|
||||
%tmp1 = lshr i32 %x, 8 ; <i32> [#uses=1]
|
||||
%tmp6 = and i32 %tmp1, 16711935 ; <i32> [#uses=1]
|
||||
%tmp1 = lshr i32 %x, 8
|
||||
%tmp6 = and i32 %tmp1, 16711935
|
||||
ret i32 %tmp6
|
||||
}
|
||||
|
||||
; CHECK-LABEL: test4:
|
||||
; CHECK: uxt
|
||||
|
||||
define i32 @test5(i32 %x) {
|
||||
%tmp1 = lshr i32 %x, 8 ; <i32> [#uses=1]
|
||||
%tmp2 = and i32 %tmp1, 16711935 ; <i32> [#uses=1]
|
||||
%tmp1 = lshr i32 %x, 8
|
||||
%tmp2 = and i32 %tmp1, 16711935
|
||||
ret i32 %tmp2
|
||||
}
|
||||
|
||||
; CHECK-LABEL: test5:
|
||||
; CHECK: uxt
|
||||
|
||||
define i32 @test6(i32 %x) {
|
||||
%tmp1 = lshr i32 %x, 16 ; <i32> [#uses=1]
|
||||
%tmp2 = and i32 %tmp1, 255 ; <i32> [#uses=1]
|
||||
%tmp4 = shl i32 %x, 16 ; <i32> [#uses=1]
|
||||
%tmp5 = and i32 %tmp4, 16711680 ; <i32> [#uses=1]
|
||||
%tmp6 = or i32 %tmp2, %tmp5 ; <i32> [#uses=1]
|
||||
%tmp1 = lshr i32 %x, 16
|
||||
%tmp2 = and i32 %tmp1, 255
|
||||
%tmp4 = shl i32 %x, 16
|
||||
%tmp5 = and i32 %tmp4, 16711680
|
||||
%tmp6 = or i32 %tmp2, %tmp5
|
||||
ret i32 %tmp6
|
||||
}
|
||||
|
||||
; CHECK-LABEL: test6:
|
||||
; CHECK: uxt
|
||||
|
||||
define i32 @test7(i32 %x) {
|
||||
%tmp1 = lshr i32 %x, 16 ; <i32> [#uses=1]
|
||||
%tmp2 = and i32 %tmp1, 255 ; <i32> [#uses=1]
|
||||
%tmp4 = shl i32 %x, 16 ; <i32> [#uses=1]
|
||||
%tmp5 = and i32 %tmp4, 16711680 ; <i32> [#uses=1]
|
||||
%tmp6 = or i32 %tmp2, %tmp5 ; <i32> [#uses=1]
|
||||
%tmp1 = lshr i32 %x, 16
|
||||
%tmp2 = and i32 %tmp1, 255
|
||||
%tmp4 = shl i32 %x, 16
|
||||
%tmp5 = and i32 %tmp4, 16711680
|
||||
%tmp6 = or i32 %tmp2, %tmp5
|
||||
ret i32 %tmp6
|
||||
}
|
||||
|
||||
; CHECK-LABEL: test7:
|
||||
; CHECK: uxt
|
||||
|
||||
define i32 @test8(i32 %x) {
|
||||
%tmp1 = shl i32 %x, 8 ; <i32> [#uses=1]
|
||||
%tmp2 = and i32 %tmp1, 16711680 ; <i32> [#uses=1]
|
||||
%tmp5 = lshr i32 %x, 24 ; <i32> [#uses=1]
|
||||
%tmp6 = or i32 %tmp2, %tmp5 ; <i32> [#uses=1]
|
||||
%tmp1 = shl i32 %x, 8
|
||||
%tmp2 = and i32 %tmp1, 16711680
|
||||
%tmp5 = lshr i32 %x, 24
|
||||
%tmp6 = or i32 %tmp2, %tmp5
|
||||
ret i32 %tmp6
|
||||
}
|
||||
|
||||
; CHECK-LABEL: test8:
|
||||
; CHECK: uxt
|
||||
|
||||
define i32 @test9(i32 %x) {
|
||||
%tmp1 = lshr i32 %x, 24 ; <i32> [#uses=1]
|
||||
%tmp4 = shl i32 %x, 8 ; <i32> [#uses=1]
|
||||
%tmp5 = and i32 %tmp4, 16711680 ; <i32> [#uses=1]
|
||||
%tmp6 = or i32 %tmp5, %tmp1 ; <i32> [#uses=1]
|
||||
%tmp1 = lshr i32 %x, 24
|
||||
%tmp4 = shl i32 %x, 8
|
||||
%tmp5 = and i32 %tmp4, 16711680
|
||||
%tmp6 = or i32 %tmp5, %tmp1
|
||||
ret i32 %tmp6
|
||||
}
|
||||
|
||||
; CHECK-LABEL: test9:
|
||||
; CHECK: uxt
|
||||
|
||||
define i32 @test10(i32 %p0) {
|
||||
%tmp1 = lshr i32 %p0, 7 ; <i32> [#uses=1]
|
||||
%tmp2 = and i32 %tmp1, 16253176 ; <i32> [#uses=2]
|
||||
%tmp4 = lshr i32 %tmp2, 5 ; <i32> [#uses=1]
|
||||
%tmp5 = and i32 %tmp4, 458759 ; <i32> [#uses=1]
|
||||
%tmp7 = or i32 %tmp5, %tmp2 ; <i32> [#uses=1]
|
||||
%tmp1 = lshr i32 %p0, 7
|
||||
%tmp2 = and i32 %tmp1, 16253176
|
||||
%tmp4 = lshr i32 %tmp2, 5
|
||||
%tmp5 = and i32 %tmp4, 458759
|
||||
%tmp7 = or i32 %tmp5, %tmp2
|
||||
ret i32 %tmp7
|
||||
}
|
||||
|
||||
; CHECK-LABEL: test10:
|
||||
; CHECK: uxt
|
||||
|
||||
|
|
Loading…
Reference in New Issue