brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.1 KiB · 8475594 Raw
138 lines · plain
1; RUN: llc < %s -mtriple=x86_64-linux -O0 | FileCheck %s --check-prefix=X642; RUN: llc < %s -mtriple=x86_64-windows-itanium -O0 | FileCheck %s --check-prefix=X643; RUN: llc < %s -mtriple=i686-- -O0 | FileCheck %s --check-prefix=X324 5; GEP indices are interpreted as signed integers, so they6; should be sign-extended to 64 bits on 64-bit targets.7; PR31818define i32 @test1(i32 %t3, ptr %t1) nounwind {9       %t9 = getelementptr i32, ptr %t1, i32 %t3           ; <ptr> [#uses=1]10       %t15 = load i32, ptr %t9            ; <i32> [#uses=1]11       ret i32 %t1512; X32-LABEL: test1:13; X32:  	movl	(%eax,%ecx,4), %eax14; X32:  	ret15 16; X64-LABEL: test1:17; X64:  	movslq	%e[[A0:di|cx]], %rax18; X64:  	movl	(%r[[A1:si|dx]],%rax,4), %eax19; X64:  	ret20 21}22define i32 @test2(i64 %t3, ptr %t1) nounwind {23       %t9 = getelementptr i32, ptr %t1, i64 %t3           ; <ptr> [#uses=1]24       %t15 = load i32, ptr %t9            ; <i32> [#uses=1]25       ret i32 %t1526; X32-LABEL: test2:27; X32:  	movl	({{%e[a-z]+}},{{%e[a-z]+}},4), %e28; X32:  	ret29 30; X64-LABEL: test2:31; X64:  	movl	(%r[[A1]],%r[[A0]],4), %eax32; X64:  	ret33}34 35 36 37; PR498438define i8 @test3(ptr %start) nounwind {39entry:40  %A = getelementptr i8, ptr %start, i64 -2               ; <ptr> [#uses=1]41  %B = load i8, ptr %A, align 1                       ; <i8> [#uses=1]42  ret i8 %B43  44  45; X32-LABEL: test3:46; X32:  	movl	4(%esp), %eax47; X32:  	movb	-2(%eax), %al48; X32:  	ret49 50; X64-LABEL: test3:51; X64:  	movb	-2(%r[[A0]]), %al52; X64:  	ret53 54}55 56define double @test4(i64 %x, ptr %p) nounwind {57entry:58  %x.addr = alloca i64, align 8                   ; <ptr> [#uses=2]59  %p.addr = alloca ptr, align 8               ; <ptr> [#uses=2]60  store i64 %x, ptr %x.addr61  store ptr %p, ptr %p.addr62  %tmp = load i64, ptr %x.addr                        ; <i64> [#uses=1]63  %add = add nsw i64 %tmp, 16                     ; <i64> [#uses=1]64  %tmp1 = load ptr, ptr %p.addr                   ; <ptr> [#uses=1]65  %arrayidx = getelementptr inbounds double, ptr %tmp1, i64 %add ; <ptr> [#uses=1]66  %tmp2 = load double, ptr %arrayidx                  ; <double> [#uses=1]67  ret double %tmp268 69; X32-LABEL: test4:70; X32: 128(%e{{.*}},%e{{.*}},8)71; X64-LABEL: test4:72; X64: 128(%r{{.*}},%r{{.*}},8)73}74 75; PR8961 - Make sure the sext for the GEP addressing comes before the load that76; is folded.77define i64 @test5(ptr %A, i32 %I, i64 %B) nounwind {78  %v8 = getelementptr i8, ptr %A, i32 %I79  %v10 = load i64, ptr %v880  %v11 = add i64 %B, %v1081  ret i64 %v1182; X64-LABEL: test5:83; X64: movslq	%e[[A1]], [[R0:%r[a-z]+]]84; X64-NEXT: (%r[[A0]],[[R0]]),85; X64: ret86}87 88; PR9500, rdar://9156159 - Don't do non-local address mode folding,89; because it may require values which wouldn't otherwise be live out90; of their blocks.91define void @test6() personality ptr @__gxx_personality_v0 {92if.end:                                           ; preds = %if.then, %invoke.cont93  %tmp15 = load i64, ptr undef94  %dec = add i64 %tmp15, 1395  store i64 %dec, ptr undef96  %call17 = invoke ptr @_ZNK18G__FastAllocString4dataEv()97          to label %invoke.cont16 unwind label %lpad98 99invoke.cont16:                                    ; preds = %if.then14100  %arrayidx18 = getelementptr inbounds i8, ptr %call17, i64 %dec101  store i8 0, ptr %arrayidx18102  unreachable103 104lpad:                                             ; preds = %if.end19, %if.then14, %if.end, %entry105  %exn = landingpad {ptr, i32}106            cleanup107  unreachable108}109declare ptr @_ZNK18G__FastAllocString4dataEv() nounwind110 111 112; PR10605 / rdar://9930964 - Don't fold loads incorrectly.  The load should113; happen before the store.  114define i32 @test7(ptr %tmp1, i32 %tmp71, i32 %tmp63) nounwind  {115; X64-LABEL: test7:116; X64:    movl	8({{%rdi|%rcx}}), %eax117; X64:     movl	$4, 8({{%rdi|%rcx}})118 119 120  %tmp29 = getelementptr inbounds {i32,i32,i32}, ptr %tmp1, i32 0, i32 2121  %tmp30 = load i32, ptr %tmp29, align 4122 123  %p2 = getelementptr inbounds {i32,i32,i32}, ptr %tmp1, i32 0, i32 2124  store i32 4, ptr %p2125  126  %tmp72 = or i32 %tmp71, %tmp30127  %tmp73 = icmp ne i32 %tmp63, 32128  br i1 %tmp73, label %T, label %F129 130T:131  ret i32 %tmp72132 133F:134  ret i32 4135}136 137declare i32 @__gxx_personality_v0(...)138