mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-04 05:17:07 +00:00 
			
		
		
		
	Upgrade syntax of tests using volatile instructions to use 'load volatile' instead of 'volatile load', which is archaic.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145171 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
		@@ -16,8 +16,8 @@ loop:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  %p.0.i.0 = getelementptr [3 x [3 x double]]* %p, i64 0, i64 %i, i64 0
 | 
					  %p.0.i.0 = getelementptr [3 x [3 x double]]* %p, i64 0, i64 %i, i64 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  volatile store double 0.0, double* %p3
 | 
					  store volatile double 0.0, double* %p3
 | 
				
			||||||
  volatile store double 0.1, double* %p.0.i.0
 | 
					  store volatile double 0.1, double* %p.0.i.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  %i.next = add i64 %i, 1
 | 
					  %i.next = add i64 %i, 1
 | 
				
			||||||
  %cmp = icmp slt i64 %i.next, 3
 | 
					  %cmp = icmp slt i64 %i.next, 3
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,8 +17,8 @@ false:
 | 
				
			|||||||
exit:
 | 
					exit:
 | 
				
			||||||
  %a = phi double* [ %x, %true ], [ %y, %false ]
 | 
					  %a = phi double* [ %x, %true ], [ %y, %false ]
 | 
				
			||||||
  %b = phi double* [ %x, %false ], [ %y, %true ]
 | 
					  %b = phi double* [ %x, %false ], [ %y, %true ]
 | 
				
			||||||
  volatile store double 0.0, double* %a
 | 
					  store volatile double 0.0, double* %a
 | 
				
			||||||
  volatile store double 1.0, double* %b
 | 
					  store volatile double 1.0, double* %b
 | 
				
			||||||
  ret void
 | 
					  ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -27,8 +27,8 @@ define void @bar(i1 %m, double* noalias %x, double* noalias %y) {
 | 
				
			|||||||
entry:
 | 
					entry:
 | 
				
			||||||
  %a = select i1 %m, double* %x, double* %y
 | 
					  %a = select i1 %m, double* %x, double* %y
 | 
				
			||||||
  %b = select i1 %m, double* %y, double* %x
 | 
					  %b = select i1 %m, double* %y, double* %x
 | 
				
			||||||
  volatile store double 0.000000e+00, double* %a
 | 
					  store volatile double 0.000000e+00, double* %a
 | 
				
			||||||
  volatile store double 1.000000e+00, double* %b
 | 
					  store volatile double 1.000000e+00, double* %b
 | 
				
			||||||
  ret void
 | 
					  ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -56,8 +56,8 @@ nfalse:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
nexit:
 | 
					nexit:
 | 
				
			||||||
  %b = phi double* [ %v, %ntrue ], [ %w, %nfalse ]
 | 
					  %b = phi double* [ %v, %ntrue ], [ %w, %nfalse ]
 | 
				
			||||||
  volatile store double 0.0, double* %a
 | 
					  store volatile double 0.0, double* %a
 | 
				
			||||||
  volatile store double 1.0, double* %b
 | 
					  store volatile double 1.0, double* %b
 | 
				
			||||||
  ret void
 | 
					  ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -67,7 +67,7 @@ define void @fin(i1 %m, double* noalias %x, double* noalias %y,
 | 
				
			|||||||
entry:
 | 
					entry:
 | 
				
			||||||
  %a = select i1 %m, double* %x, double* %y
 | 
					  %a = select i1 %m, double* %x, double* %y
 | 
				
			||||||
  %b = select i1 %n, double* %v, double* %w
 | 
					  %b = select i1 %n, double* %v, double* %w
 | 
				
			||||||
  volatile store double 0.000000e+00, double* %a
 | 
					  store volatile double 0.000000e+00, double* %a
 | 
				
			||||||
  volatile store double 1.000000e+00, double* %b
 | 
					  store volatile double 1.000000e+00, double* %b
 | 
				
			||||||
  ret void
 | 
					  ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ bb74.i:		; preds = %bb88.i, %bb74.i, %entry
 | 
				
			|||||||
bb88.i:		; preds = %bb74.i
 | 
					bb88.i:		; preds = %bb74.i
 | 
				
			||||||
	br i1 false, label %mandel.exit, label %bb74.i
 | 
						br i1 false, label %mandel.exit, label %bb74.i
 | 
				
			||||||
mandel.exit:		; preds = %bb88.i
 | 
					mandel.exit:		; preds = %bb88.i
 | 
				
			||||||
	%tmp2 = volatile load double* getelementptr ({ double, double }* @accum, i32 0, i32 0), align 8		; <double> [#uses=1]
 | 
						%tmp2 = load volatile double* getelementptr ({ double, double }* @accum, i32 0, i32 0), align 8		; <double> [#uses=1]
 | 
				
			||||||
	%tmp23 = fptosi double %tmp2 to i32		; <i32> [#uses=1]
 | 
						%tmp23 = fptosi double %tmp2 to i32		; <i32> [#uses=1]
 | 
				
			||||||
	%tmp5 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8]* @.str, i32 0, i32 0), i32 %tmp23 )		; <i32> [#uses=0]
 | 
						%tmp5 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8]* @.str, i32 0, i32 0), i32 %tmp23 )		; <i32> [#uses=0]
 | 
				
			||||||
	ret i32 0
 | 
						ret i32 0
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,7 +26,7 @@ define i32* @m_231b(i32, i32, i32*, i32*, i32*) nounwind {
 | 
				
			|||||||
; CHECKV4: bx r{{.*}}
 | 
					; CHECKV4: bx r{{.*}}
 | 
				
			||||||
BB0:
 | 
					BB0:
 | 
				
			||||||
  %5 = inttoptr i32 %0 to i32*                    ; <i32*> [#uses=1]
 | 
					  %5 = inttoptr i32 %0 to i32*                    ; <i32*> [#uses=1]
 | 
				
			||||||
  %t35 = volatile load i32* %5                    ; <i32> [#uses=1]
 | 
					  %t35 = load volatile i32* %5                    ; <i32> [#uses=1]
 | 
				
			||||||
  %6 = inttoptr i32 %t35 to i32**                 ; <i32**> [#uses=1]
 | 
					  %6 = inttoptr i32 %t35 to i32**                 ; <i32**> [#uses=1]
 | 
				
			||||||
  %7 = getelementptr i32** %6, i32 86             ; <i32**> [#uses=1]
 | 
					  %7 = getelementptr i32** %6, i32 86             ; <i32**> [#uses=1]
 | 
				
			||||||
  %8 = load i32** %7                              ; <i32*> [#uses=1]
 | 
					  %8 = load i32** %7                              ; <i32*> [#uses=1]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +0,0 @@
 | 
				
			|||||||
; RUN: llc < %s -march=c | grep volatile
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define void @test(i32* %P) {
 | 
					 | 
				
			||||||
        %X = volatile load i32* %P              ; <i32> [#uses=1]
 | 
					 | 
				
			||||||
        volatile store i32 %X, i32* %P
 | 
					 | 
				
			||||||
        ret void
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@@ -1,10 +0,0 @@
 | 
				
			|||||||
; RUN: llc < %s -march=c | grep {\\* *volatile *\\*}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@G = external global void ()*           ; <void ()**> [#uses=2]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
define void @test() {
 | 
					 | 
				
			||||||
        volatile store void ()* @test, void ()** @G
 | 
					 | 
				
			||||||
        volatile load void ()** @G              ; <void ()*>:1 [#uses=0]
 | 
					 | 
				
			||||||
        ret void
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@@ -8,8 +8,8 @@ define void @test(i32* %P) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define void @test2(i32* %P) {
 | 
					define void @test2(i32* %P) {
 | 
				
			||||||
        %X = volatile load i32* %P, align 2
 | 
					        %X = load volatile i32* %P, align 2
 | 
				
			||||||
        volatile store i32 %X, i32* %P, align 2
 | 
					        store volatile i32 %X, i32* %P, align 2
 | 
				
			||||||
        ret void
 | 
					        ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,9 +7,9 @@ target triple = "msp430-unknown-linux-gnu"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
define void @uip_arp_arpin() nounwind {
 | 
					define void @uip_arp_arpin() nounwind {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
	%tmp = volatile load i16* @uip_len		; <i16> [#uses=1]
 | 
						%tmp = load volatile i16* @uip_len		; <i16> [#uses=1]
 | 
				
			||||||
	%cmp = icmp ult i16 %tmp, 42		; <i1> [#uses=1]
 | 
						%cmp = icmp ult i16 %tmp, 42		; <i1> [#uses=1]
 | 
				
			||||||
	volatile store i16 0, i16* @uip_len
 | 
						store volatile i16 0, i16* @uip_len
 | 
				
			||||||
	br i1 %cmp, label %if.then, label %if.end
 | 
						br i1 %cmp, label %if.then, label %if.end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if.then:		; preds = %entry
 | 
					if.then:		; preds = %entry
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,8 +6,8 @@ target triple = "msp430-generic-generic"
 | 
				
			|||||||
define i16 @foo() nounwind readnone {
 | 
					define i16 @foo() nounwind readnone {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
  %result = alloca i16, align 1                   ; <i16*> [#uses=2]
 | 
					  %result = alloca i16, align 1                   ; <i16*> [#uses=2]
 | 
				
			||||||
  volatile store i16 0, i16* %result
 | 
					  store volatile i16 0, i16* %result
 | 
				
			||||||
  %tmp = volatile load i16* %result               ; <i16> [#uses=1]
 | 
					  %tmp = load volatile i16* %result               ; <i16> [#uses=1]
 | 
				
			||||||
  ret i16 %tmp
 | 
					  ret i16 %tmp
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -22,8 +22,8 @@ while.cond:                                       ; preds = %while.cond, %entry
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
while.end:                                        ; preds = %while.cond
 | 
					while.end:                                        ; preds = %while.cond
 | 
				
			||||||
  %result.i = alloca i16, align 1                 ; <i16*> [#uses=2]
 | 
					  %result.i = alloca i16, align 1                 ; <i16*> [#uses=2]
 | 
				
			||||||
  volatile store i16 0, i16* %result.i
 | 
					  store volatile i16 0, i16* %result.i
 | 
				
			||||||
  %tmp.i = volatile load i16* %result.i           ; <i16> [#uses=0]
 | 
					  %tmp.i = load volatile i16* %result.i           ; <i16> [#uses=0]
 | 
				
			||||||
  ret i16 0
 | 
					  ret i16 0
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,10 +11,10 @@ entry:
 | 
				
			|||||||
  %x.addr = alloca i8                             ; <i8*> [#uses=2]
 | 
					  %x.addr = alloca i8                             ; <i8*> [#uses=2]
 | 
				
			||||||
  %tmp = alloca i8, align 1                       ; <i8*> [#uses=2]
 | 
					  %tmp = alloca i8, align 1                       ; <i8*> [#uses=2]
 | 
				
			||||||
  store i8 %x, i8* %x.addr
 | 
					  store i8 %x, i8* %x.addr
 | 
				
			||||||
  %tmp1 = volatile load i8* @"\010x0021"          ; <i8> [#uses=1]
 | 
					  %tmp1 = load volatile i8* @"\010x0021"          ; <i8> [#uses=1]
 | 
				
			||||||
  store i8 %tmp1, i8* %tmp
 | 
					  store i8 %tmp1, i8* %tmp
 | 
				
			||||||
  %tmp2 = load i8* %x.addr                        ; <i8> [#uses=1]
 | 
					  %tmp2 = load i8* %x.addr                        ; <i8> [#uses=1]
 | 
				
			||||||
  volatile store i8 %tmp2, i8* @"\010x0021"
 | 
					  store volatile i8 %tmp2, i8* @"\010x0021"
 | 
				
			||||||
  %tmp3 = load i8* %tmp                           ; <i8> [#uses=1]
 | 
					  %tmp3 = load i8* %tmp                           ; <i8> [#uses=1]
 | 
				
			||||||
  store i8 %tmp3, i8* %retval
 | 
					  store i8 %tmp3, i8* %retval
 | 
				
			||||||
  %0 = load i8* %retval                           ; <i8> [#uses=1]
 | 
					  %0 = load i8* %retval                           ; <i8> [#uses=1]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,9 +4,9 @@ define void @foo() nounwind {
 | 
				
			|||||||
entry:
 | 
					entry:
 | 
				
			||||||
	%r = alloca i8		; <i8*> [#uses=2]
 | 
						%r = alloca i8		; <i8*> [#uses=2]
 | 
				
			||||||
	%"alloca point" = bitcast i32 0 to i32		; <i32> [#uses=0]
 | 
						%"alloca point" = bitcast i32 0 to i32		; <i32> [#uses=0]
 | 
				
			||||||
	volatile load i8* %r, align 1		; <i8>:0 [#uses=1]
 | 
						load volatile i8* %r, align 1		; <i8>:0 [#uses=1]
 | 
				
			||||||
	or i8 %0, 1		; <i8>:1 [#uses=1]
 | 
						or i8 %0, 1		; <i8>:1 [#uses=1]
 | 
				
			||||||
	volatile store i8 %1, i8* %r, align 1
 | 
						store volatile i8 %1, i8* %r, align 1
 | 
				
			||||||
	br label %return
 | 
						br label %return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
return:		; preds = %entry
 | 
					return:		; preds = %entry
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,7 +32,7 @@ define i8 @am3(i8 %x, i16 %n) nounwind {
 | 
				
			|||||||
; CHECK:		bis.b	bar(r14), r15
 | 
					; CHECK:		bis.b	bar(r14), r15
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define i16 @am4(i16 %x) nounwind {
 | 
					define i16 @am4(i16 %x) nounwind {
 | 
				
			||||||
	%1 = volatile load i16* inttoptr(i16 32 to i16*)
 | 
						%1 = load volatile i16* inttoptr(i16 32 to i16*)
 | 
				
			||||||
	%2 = or i16 %1,%x
 | 
						%2 = or i16 %1,%x
 | 
				
			||||||
	ret i16 %2
 | 
						ret i16 %2
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,9 +35,9 @@ define void @am3(i16 %i, i8 %x) nounwind {
 | 
				
			|||||||
; CHECK:		bis.b	r14, bar(r15)
 | 
					; CHECK:		bis.b	r14, bar(r15)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define void @am4(i16 %x) nounwind {
 | 
					define void @am4(i16 %x) nounwind {
 | 
				
			||||||
	%1 = volatile load i16* inttoptr(i16 32 to i16*)
 | 
						%1 = load volatile i16* inttoptr(i16 32 to i16*)
 | 
				
			||||||
	%2 = or i16 %x, %1
 | 
						%2 = or i16 %x, %1
 | 
				
			||||||
	volatile store i16 %2, i16* inttoptr(i16 32 to i16*)
 | 
						store volatile i16 %2, i16* inttoptr(i16 32 to i16*)
 | 
				
			||||||
	ret void
 | 
						ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
; CHECK: am4:
 | 
					; CHECK: am4:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,7 +29,7 @@ define i8 @am3(i16 %n) nounwind {
 | 
				
			|||||||
; CHECK:		mov.b	bar(r15), r15
 | 
					; CHECK:		mov.b	bar(r15), r15
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define i16 @am4() nounwind {
 | 
					define i16 @am4() nounwind {
 | 
				
			||||||
	%1 = volatile load i16* inttoptr(i16 32 to i16*)
 | 
						%1 = load volatile i16* inttoptr(i16 32 to i16*)
 | 
				
			||||||
	ret i16 %1
 | 
						ret i16 %1
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
; CHECK: am4:
 | 
					; CHECK: am4:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,7 +29,7 @@ define void @am3(i16 %i, i8 %a) nounwind {
 | 
				
			|||||||
; CHECK:		mov.b	r14, bar(r15)
 | 
					; CHECK:		mov.b	r14, bar(r15)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define void @am4(i16 %a) nounwind {
 | 
					define void @am4(i16 %a) nounwind {
 | 
				
			||||||
	volatile store i16 %a, i16* inttoptr(i16 32 to i16*)
 | 
						store volatile i16 %a, i16* inttoptr(i16 32 to i16*)
 | 
				
			||||||
	ret void
 | 
						ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
; CHECK: am4:
 | 
					; CHECK: am4:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,8 +3,8 @@
 | 
				
			|||||||
define i32 @main() nounwind readnone {
 | 
					define i32 @main() nounwind readnone {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
  %x = alloca i32, align 4                        ; <i32*> [#uses=2]
 | 
					  %x = alloca i32, align 4                        ; <i32*> [#uses=2]
 | 
				
			||||||
  volatile store i32 2, i32* %x, align 4
 | 
					  store volatile i32 2, i32* %x, align 4
 | 
				
			||||||
  %0 = volatile load i32* %x, align 4             ; <i32> [#uses=1]
 | 
					  %0 = load volatile i32* %x, align 4             ; <i32> [#uses=1]
 | 
				
			||||||
; CHECK: lui $3, %hi($JTI0_0)
 | 
					; CHECK: lui $3, %hi($JTI0_0)
 | 
				
			||||||
; CHECK: addiu $3, $3, %lo($JTI0_0)
 | 
					; CHECK: addiu $3, $3, %lo($JTI0_0)
 | 
				
			||||||
; CHECK: sll $2, $2, 2
 | 
					; CHECK: sll $2, $2, 2
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
define void @simple_vol_file() nounwind {
 | 
					define void @simple_vol_file() nounwind {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
  %tmp = volatile load i32** @stat_vol_ptr_int, align 4
 | 
					  %tmp = load volatile i32** @stat_vol_ptr_int, align 4
 | 
				
			||||||
  %0 = bitcast i32* %tmp to i8*
 | 
					  %0 = bitcast i32* %tmp to i8*
 | 
				
			||||||
  call void @llvm.prefetch(i8* %0, i32 0, i32 0, i32 1)
 | 
					  call void @llvm.prefetch(i8* %0, i32 0, i32 0, i32 1)
 | 
				
			||||||
  %tmp1 = load i32** @stat_ptr_vol_int, align 4
 | 
					  %tmp1 = load i32** @stat_ptr_vol_int, align 4
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@ declare void @IODelay(i32)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
define i32 @_Z14ProgramByWordsPvyy(i8* %buffer, i64 %Offset, i64 %bufferSize) nounwind  {
 | 
					define i32 @_Z14ProgramByWordsPvyy(i8* %buffer, i64 %Offset, i64 %bufferSize) nounwind  {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
	volatile store i8 -1, i8* null, align 1
 | 
						store volatile i8 -1, i8* null, align 1
 | 
				
			||||||
	%tmp28 = icmp eq i8 0, 0		; <i1> [#uses=1]
 | 
						%tmp28 = icmp eq i8 0, 0		; <i1> [#uses=1]
 | 
				
			||||||
	br i1 %tmp28, label %bb107, label %bb
 | 
						br i1 %tmp28, label %bb107, label %bb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -43,7 +43,7 @@ bb68:		; preds = %bb31
 | 
				
			|||||||
	%tmp2021.i = trunc i64 %Pos.0.reg2mem.0 to i32		; <i32> [#uses=1]
 | 
						%tmp2021.i = trunc i64 %Pos.0.reg2mem.0 to i32		; <i32> [#uses=1]
 | 
				
			||||||
	%tmp202122.i = inttoptr i32 %tmp2021.i to i8*		; <i8*> [#uses=1]
 | 
						%tmp202122.i = inttoptr i32 %tmp2021.i to i8*		; <i8*> [#uses=1]
 | 
				
			||||||
	tail call void @IODelay( i32 500 ) nounwind 
 | 
						tail call void @IODelay( i32 500 ) nounwind 
 | 
				
			||||||
	%tmp53.i = volatile load i16* null, align 2		; <i16> [#uses=2]
 | 
						%tmp53.i = load volatile i16* null, align 2		; <i16> [#uses=2]
 | 
				
			||||||
	%tmp5455.i = zext i16 %tmp53.i to i32		; <i32> [#uses=1]
 | 
						%tmp5455.i = zext i16 %tmp53.i to i32		; <i32> [#uses=1]
 | 
				
			||||||
	br i1 false, label %bb.i, label %bb65.i
 | 
						br i1 false, label %bb.i, label %bb65.i
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -59,7 +59,7 @@ bb70.i:		; preds = %bb65.i
 | 
				
			|||||||
	ret i32 0
 | 
						ret i32 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_Z24unlock_then_erase_sectory.exit:		; preds = %bb65.i
 | 
					_Z24unlock_then_erase_sectory.exit:		; preds = %bb65.i
 | 
				
			||||||
	volatile store i8 -1, i8* %tmp202122.i, align 1
 | 
						store volatile i8 -1, i8* %tmp202122.i, align 1
 | 
				
			||||||
	%tmp93 = add i64 0, %Pos.0.reg2mem.0		; <i64> [#uses=2]
 | 
						%tmp93 = add i64 0, %Pos.0.reg2mem.0		; <i64> [#uses=2]
 | 
				
			||||||
	%tmp98 = add i64 0, %Offset		; <i64> [#uses=1]
 | 
						%tmp98 = add i64 0, %Offset		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp100 = icmp ugt i64 %tmp98, %tmp93		; <i1> [#uses=1]
 | 
						%tmp100 = icmp ugt i64 %tmp98, %tmp93		; <i1> [#uses=1]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,9 +13,9 @@ entry:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bb:             ; preds = %bb, %entry
 | 
					bb:             ; preds = %bb, %entry
 | 
				
			||||||
        %a_addr.0 = phi i32 [ %a, %entry ], [ %tmp5, %bb ]              ; <i32> [#uses=2]
 | 
					        %a_addr.0 = phi i32 [ %a, %entry ], [ %tmp5, %bb ]              ; <i32> [#uses=2]
 | 
				
			||||||
        %tmp = volatile load i8** %va           ; <i8*> [#uses=2]
 | 
					        %tmp = load volatile i8** %va           ; <i8*> [#uses=2]
 | 
				
			||||||
        %tmp2 = getelementptr i8* %tmp, i32 4           ; <i8*> [#uses=1]
 | 
					        %tmp2 = getelementptr i8* %tmp, i32 4           ; <i8*> [#uses=1]
 | 
				
			||||||
        volatile store i8* %tmp2, i8** %va
 | 
					        store volatile i8* %tmp2, i8** %va
 | 
				
			||||||
        %tmp5 = add i32 %a_addr.0, -1           ; <i32> [#uses=1]
 | 
					        %tmp5 = add i32 %a_addr.0, -1           ; <i32> [#uses=1]
 | 
				
			||||||
        %tmp.upgrd.2 = icmp eq i32 %a_addr.0, 1         ; <i1> [#uses=1]
 | 
					        %tmp.upgrd.2 = icmp eq i32 %a_addr.0, 1         ; <i1> [#uses=1]
 | 
				
			||||||
        br i1 %tmp.upgrd.2, label %bb7, label %bb
 | 
					        br i1 %tmp.upgrd.2, label %bb7, label %bb
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@ target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32-
 | 
				
			|||||||
define void @test(%s1* %this, i32 %format, i32 %w, i32 %h, i32 %levels, i32* %s, i8* %data, i32* nocapture %rowbytes, void (i8*, i8*)* %release, i8* %info) nounwind {
 | 
					define void @test(%s1* %this, i32 %format, i32 %w, i32 %h, i32 %levels, i32* %s, i8* %data, i32* nocapture %rowbytes, void (i8*, i8*)* %release, i8* %info) nounwind {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
  %tmp1 = getelementptr inbounds %s1* %this, i32 0, i32 0, i32 0, i32 1, i32 0, i32 0
 | 
					  %tmp1 = getelementptr inbounds %s1* %this, i32 0, i32 0, i32 0, i32 1, i32 0, i32 0
 | 
				
			||||||
  volatile store i32 1, i32* %tmp1, align 4
 | 
					  store volatile i32 1, i32* %tmp1, align 4
 | 
				
			||||||
  %tmp12 = getelementptr inbounds %s1* %this, i32 0, i32 1
 | 
					  %tmp12 = getelementptr inbounds %s1* %this, i32 0, i32 1
 | 
				
			||||||
  store i32 %levels, i32* %tmp12, align 4
 | 
					  store i32 %levels, i32* %tmp12, align 4
 | 
				
			||||||
  %tmp13 = getelementptr inbounds %s1* %this, i32 0, i32 3
 | 
					  %tmp13 = getelementptr inbounds %s1* %this, i32 0, i32 3
 | 
				
			||||||
@@ -46,7 +46,7 @@ entry:
 | 
				
			|||||||
  %tmp24 = shl i32 %flags.0, 16
 | 
					  %tmp24 = shl i32 %flags.0, 16
 | 
				
			||||||
  %asmtmp.i.i.i = tail call %0 asm sideeffect "\0A0:\09ldrex $1, [$2]\0A\09orr $1, $1, $3\0A\09strex $0, $1, [$2]\0A\09cmp $0, #0\0A\09bne 0b", "=&r,=&r,r,r,~{memory},~{cc}"(i32* %tmp1, i32 %tmp24) nounwind
 | 
					  %asmtmp.i.i.i = tail call %0 asm sideeffect "\0A0:\09ldrex $1, [$2]\0A\09orr $1, $1, $3\0A\09strex $0, $1, [$2]\0A\09cmp $0, #0\0A\09bne 0b", "=&r,=&r,r,r,~{memory},~{cc}"(i32* %tmp1, i32 %tmp24) nounwind
 | 
				
			||||||
  %tmp25 = getelementptr inbounds %s1* %this, i32 0, i32 2, i32 0, i32 0
 | 
					  %tmp25 = getelementptr inbounds %s1* %this, i32 0, i32 2, i32 0, i32 0
 | 
				
			||||||
  volatile store i32 1, i32* %tmp25, align 4
 | 
					  store volatile i32 1, i32* %tmp25, align 4
 | 
				
			||||||
  %tmp26 = icmp eq i32 %levels, 0
 | 
					  %tmp26 = icmp eq i32 %levels, 0
 | 
				
			||||||
  br i1 %tmp26, label %return, label %bb4
 | 
					  br i1 %tmp26, label %return, label %bb4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
; RUN: llc < %s -march=x86 | not grep movsd
 | 
					; RUN: llc < %s -march=x86 | not grep movsd
 | 
				
			||||||
; RUN: llc < %s -march=x86 | grep movw
 | 
					; RUN: llc < %s -march=x86 | grep movw
 | 
				
			||||||
; RUN: llc < %s -march=x86 | grep addw
 | 
					; RUN: llc < %s -march=x86 | grep addw
 | 
				
			||||||
; These transforms are turned off for volatile loads and stores.
 | 
					; These transforms are turned off for load volatiles and stores.
 | 
				
			||||||
; Check that they weren't turned off for all loads and stores!
 | 
					; Check that they weren't turned off for all loads and stores!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@atomic = global double 0.000000e+00		; <double*> [#uses=1]
 | 
					@atomic = global double 0.000000e+00		; <double*> [#uses=1]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,13 +8,13 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
define i16 @f(i64 %x, double %y) {
 | 
					define i16 @f(i64 %x, double %y) {
 | 
				
			||||||
	%b = bitcast i64 %x to double		; <double> [#uses=1]
 | 
						%b = bitcast i64 %x to double		; <double> [#uses=1]
 | 
				
			||||||
	volatile store double %b, double* @atomic ; one processor operation only
 | 
						store volatile double %b, double* @atomic ; one processor operation only
 | 
				
			||||||
	volatile store double 0.000000e+00, double* @atomic2 ; one processor operation only
 | 
						store volatile double 0.000000e+00, double* @atomic2 ; one processor operation only
 | 
				
			||||||
	%b2 = bitcast double %y to i64		; <i64> [#uses=1]
 | 
						%b2 = bitcast double %y to i64		; <i64> [#uses=1]
 | 
				
			||||||
	volatile store i64 %b2, i64* @anything ; may transform to store of double
 | 
						store volatile i64 %b2, i64* @anything ; may transform to store of double
 | 
				
			||||||
	%l = volatile load i32* @ioport		; must not narrow
 | 
						%l = load volatile i32* @ioport		; must not narrow
 | 
				
			||||||
	%t = trunc i32 %l to i16		; <i16> [#uses=1]
 | 
						%t = trunc i32 %l to i16		; <i16> [#uses=1]
 | 
				
			||||||
	%l2 = volatile load i32* @ioport		; must not narrow
 | 
						%l2 = load volatile i32* @ioport		; must not narrow
 | 
				
			||||||
	%tmp = lshr i32 %l2, 16		; <i32> [#uses=1]
 | 
						%tmp = lshr i32 %l2, 16		; <i32> [#uses=1]
 | 
				
			||||||
	%t2 = trunc i32 %tmp to i16		; <i16> [#uses=1]
 | 
						%t2 = trunc i32 %tmp to i16		; <i16> [#uses=1]
 | 
				
			||||||
	%f = add i16 %t, %t2		; <i16> [#uses=1]
 | 
						%f = add i16 %t, %t2		; <i16> [#uses=1]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
define i32 @main() nounwind {
 | 
					define i32 @main() nounwind {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
	%0 = volatile load i32* @g_407, align 4		; <i32> [#uses=1]
 | 
						%0 = load volatile i32* @g_407, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	%1 = trunc i32 %0 to i8		; <i8> [#uses=1]
 | 
						%1 = trunc i32 %0 to i8		; <i8> [#uses=1]
 | 
				
			||||||
	%2 = tail call i32 @func_45(i8 zeroext %1) nounwind		; <i32> [#uses=0]
 | 
						%2 = tail call i32 @func_45(i8 zeroext %1) nounwind		; <i32> [#uses=0]
 | 
				
			||||||
	ret i32 0
 | 
						ret i32 0
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,6 +6,6 @@ define void @test(<8 x double>* %P, i64* %Q) nounwind {
 | 
				
			|||||||
	%B = bitcast <8 x double> %A to i512		; <i512> [#uses=1]
 | 
						%B = bitcast <8 x double> %A to i512		; <i512> [#uses=1]
 | 
				
			||||||
	%C = lshr i512 %B, 448		; <i512> [#uses=1]
 | 
						%C = lshr i512 %B, 448		; <i512> [#uses=1]
 | 
				
			||||||
	%D = trunc i512 %C to i64		; <i64> [#uses=1]
 | 
						%D = trunc i512 %C to i64		; <i64> [#uses=1]
 | 
				
			||||||
	volatile store i64 %D, i64* %Q
 | 
						store volatile i64 %D, i64* %Q
 | 
				
			||||||
	ret void
 | 
						ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,30 +9,30 @@
 | 
				
			|||||||
@X = external global i64		; <i64*> [#uses=25]
 | 
					@X = external global i64		; <i64*> [#uses=25]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define fastcc i64 @foo() nounwind {
 | 
					define fastcc i64 @foo() nounwind {
 | 
				
			||||||
	%tmp = volatile load i64* @X		; <i64> [#uses=7]
 | 
						%tmp = load volatile i64* @X		; <i64> [#uses=7]
 | 
				
			||||||
	%tmp1 = volatile load i64* @X		; <i64> [#uses=5]
 | 
						%tmp1 = load volatile i64* @X		; <i64> [#uses=5]
 | 
				
			||||||
	%tmp2 = volatile load i64* @X		; <i64> [#uses=3]
 | 
						%tmp2 = load volatile i64* @X		; <i64> [#uses=3]
 | 
				
			||||||
	%tmp3 = volatile load i64* @X		; <i64> [#uses=1]
 | 
						%tmp3 = load volatile i64* @X		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp4 = volatile load i64* @X		; <i64> [#uses=5]
 | 
						%tmp4 = load volatile i64* @X		; <i64> [#uses=5]
 | 
				
			||||||
	%tmp5 = volatile load i64* @X		; <i64> [#uses=3]
 | 
						%tmp5 = load volatile i64* @X		; <i64> [#uses=3]
 | 
				
			||||||
	%tmp6 = volatile load i64* @X		; <i64> [#uses=2]
 | 
						%tmp6 = load volatile i64* @X		; <i64> [#uses=2]
 | 
				
			||||||
	%tmp7 = volatile load i64* @X		; <i64> [#uses=1]
 | 
						%tmp7 = load volatile i64* @X		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp8 = volatile load i64* @X		; <i64> [#uses=1]
 | 
						%tmp8 = load volatile i64* @X		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp9 = volatile load i64* @X		; <i64> [#uses=1]
 | 
						%tmp9 = load volatile i64* @X		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp10 = volatile load i64* @X		; <i64> [#uses=1]
 | 
						%tmp10 = load volatile i64* @X		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp11 = volatile load i64* @X		; <i64> [#uses=1]
 | 
						%tmp11 = load volatile i64* @X		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp12 = volatile load i64* @X		; <i64> [#uses=1]
 | 
						%tmp12 = load volatile i64* @X		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp13 = volatile load i64* @X		; <i64> [#uses=1]
 | 
						%tmp13 = load volatile i64* @X		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp14 = volatile load i64* @X		; <i64> [#uses=1]
 | 
						%tmp14 = load volatile i64* @X		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp15 = volatile load i64* @X		; <i64> [#uses=1]
 | 
						%tmp15 = load volatile i64* @X		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp16 = volatile load i64* @X		; <i64> [#uses=1]
 | 
						%tmp16 = load volatile i64* @X		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp17 = volatile load i64* @X		; <i64> [#uses=1]
 | 
						%tmp17 = load volatile i64* @X		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp18 = volatile load i64* @X		; <i64> [#uses=1]
 | 
						%tmp18 = load volatile i64* @X		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp19 = volatile load i64* @X		; <i64> [#uses=1]
 | 
						%tmp19 = load volatile i64* @X		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp20 = volatile load i64* @X		; <i64> [#uses=1]
 | 
						%tmp20 = load volatile i64* @X		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp21 = volatile load i64* @X		; <i64> [#uses=1]
 | 
						%tmp21 = load volatile i64* @X		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp22 = volatile load i64* @X		; <i64> [#uses=1]
 | 
						%tmp22 = load volatile i64* @X		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp23 = volatile load i64* @X		; <i64> [#uses=1]
 | 
						%tmp23 = load volatile i64* @X		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp24 = call i64 @llvm.bswap.i64(i64 %tmp8)		; <i64> [#uses=1]
 | 
						%tmp24 = call i64 @llvm.bswap.i64(i64 %tmp8)		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp25 = add i64 %tmp6, %tmp5		; <i64> [#uses=1]
 | 
						%tmp25 = add i64 %tmp6, %tmp5		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp26 = add i64 %tmp25, %tmp4		; <i64> [#uses=1]
 | 
						%tmp26 = add i64 %tmp25, %tmp4		; <i64> [#uses=1]
 | 
				
			||||||
@@ -229,7 +229,7 @@ define fastcc i64 @foo() nounwind {
 | 
				
			|||||||
	%tmp217 = add i64 %tmp205, %tmp215		; <i64> [#uses=1]
 | 
						%tmp217 = add i64 %tmp205, %tmp215		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp218 = add i64 %tmp217, %tmp211		; <i64> [#uses=1]
 | 
						%tmp218 = add i64 %tmp217, %tmp211		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp219 = call i64 @llvm.bswap.i64(i64 %tmp23)		; <i64> [#uses=2]
 | 
						%tmp219 = call i64 @llvm.bswap.i64(i64 %tmp23)		; <i64> [#uses=2]
 | 
				
			||||||
	volatile store i64 %tmp219, i64* @X, align 8
 | 
						store volatile i64 %tmp219, i64* @X, align 8
 | 
				
			||||||
	%tmp220 = add i64 %tmp203, %tmp190		; <i64> [#uses=1]
 | 
						%tmp220 = add i64 %tmp203, %tmp190		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp221 = add i64 %tmp220, %tmp216		; <i64> [#uses=1]
 | 
						%tmp221 = add i64 %tmp220, %tmp216		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp222 = add i64 %tmp219, %tmp177		; <i64> [#uses=1]
 | 
						%tmp222 = add i64 %tmp219, %tmp177		; <i64> [#uses=1]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@ entry:
 | 
				
			|||||||
	br label %bb
 | 
						br label %bb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb:		; preds = %bb.i, %bb, %entry
 | 
					bb:		; preds = %bb.i, %bb, %entry
 | 
				
			||||||
	%2 = volatile load i32* @g_9, align 4		; <i32> [#uses=2]
 | 
						%2 = load volatile i32* @g_9, align 4		; <i32> [#uses=2]
 | 
				
			||||||
	%3 = icmp sgt i32 %2, 1		; <i1> [#uses=1]
 | 
						%3 = icmp sgt i32 %2, 1		; <i1> [#uses=1]
 | 
				
			||||||
	%4 = and i1 %3, %1		; <i1> [#uses=1]
 | 
						%4 = and i1 %3, %1		; <i1> [#uses=1]
 | 
				
			||||||
	br i1 %4, label %bb.i, label %bb
 | 
						br i1 %4, label %bb.i, label %bb
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,18 +41,18 @@ bb3:                                              ; preds = %bb2, %bb
 | 
				
			|||||||
  br i1 undef, label %bb5, label %bb4
 | 
					  br i1 undef, label %bb5, label %bb4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb4:                                              ; preds = %bb3
 | 
					bb4:                                              ; preds = %bb3
 | 
				
			||||||
  %17 = volatile load i32* @uint8, align 4        ; <i32> [#uses=0]
 | 
					  %17 = load volatile i32* @uint8, align 4        ; <i32> [#uses=0]
 | 
				
			||||||
  br label %bb5
 | 
					  br label %bb5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb5:                                              ; preds = %bb4, %bb3
 | 
					bb5:                                              ; preds = %bb4, %bb3
 | 
				
			||||||
  %18 = volatile load i32* @uint8, align 4        ; <i32> [#uses=0]
 | 
					  %18 = load volatile i32* @uint8, align 4        ; <i32> [#uses=0]
 | 
				
			||||||
  %19 = sext i8 undef to i16                      ; <i16> [#uses=1]
 | 
					  %19 = sext i8 undef to i16                      ; <i16> [#uses=1]
 | 
				
			||||||
  %20 = tail call i32 @func_24(i16 zeroext %19, i8 signext 1) nounwind; <i32> [#uses=0]
 | 
					  %20 = tail call i32 @func_24(i16 zeroext %19, i8 signext 1) nounwind; <i32> [#uses=0]
 | 
				
			||||||
  br i1 undef, label %return, label %bb6.preheader
 | 
					  br i1 undef, label %return, label %bb6.preheader
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb6.preheader:                                    ; preds = %bb5
 | 
					bb6.preheader:                                    ; preds = %bb5
 | 
				
			||||||
  %21 = sext i8 %p_52 to i32                      ; <i32> [#uses=1]
 | 
					  %21 = sext i8 %p_52 to i32                      ; <i32> [#uses=1]
 | 
				
			||||||
  %22 = volatile load i32* @uint8, align 4        ; <i32> [#uses=0]
 | 
					  %22 = load volatile i32* @uint8, align 4        ; <i32> [#uses=0]
 | 
				
			||||||
  %23 = tail call i32 (...)* @safefuncts(i32 %21, i32 1) nounwind; <i32> [#uses=0]
 | 
					  %23 = tail call i32 (...)* @safefuncts(i32 %21, i32 1) nounwind; <i32> [#uses=0]
 | 
				
			||||||
  unreachable
 | 
					  unreachable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -690,199 +690,199 @@ define void @many_unanalyzable_branches() {
 | 
				
			|||||||
entry:
 | 
					entry:
 | 
				
			||||||
  br label %0
 | 
					  br label %0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  %val0 = volatile load float* undef
 | 
					  %val0 = load volatile float* undef
 | 
				
			||||||
  %cmp0 = fcmp une float %val0, undef
 | 
					  %cmp0 = fcmp une float %val0, undef
 | 
				
			||||||
  br i1 %cmp0, label %1, label %0
 | 
					  br i1 %cmp0, label %1, label %0
 | 
				
			||||||
  %val1 = volatile load float* undef
 | 
					  %val1 = load volatile float* undef
 | 
				
			||||||
  %cmp1 = fcmp une float %val1, undef
 | 
					  %cmp1 = fcmp une float %val1, undef
 | 
				
			||||||
  br i1 %cmp1, label %2, label %1
 | 
					  br i1 %cmp1, label %2, label %1
 | 
				
			||||||
  %val2 = volatile load float* undef
 | 
					  %val2 = load volatile float* undef
 | 
				
			||||||
  %cmp2 = fcmp une float %val2, undef
 | 
					  %cmp2 = fcmp une float %val2, undef
 | 
				
			||||||
  br i1 %cmp2, label %3, label %2
 | 
					  br i1 %cmp2, label %3, label %2
 | 
				
			||||||
  %val3 = volatile load float* undef
 | 
					  %val3 = load volatile float* undef
 | 
				
			||||||
  %cmp3 = fcmp une float %val3, undef
 | 
					  %cmp3 = fcmp une float %val3, undef
 | 
				
			||||||
  br i1 %cmp3, label %4, label %3
 | 
					  br i1 %cmp3, label %4, label %3
 | 
				
			||||||
  %val4 = volatile load float* undef
 | 
					  %val4 = load volatile float* undef
 | 
				
			||||||
  %cmp4 = fcmp une float %val4, undef
 | 
					  %cmp4 = fcmp une float %val4, undef
 | 
				
			||||||
  br i1 %cmp4, label %5, label %4
 | 
					  br i1 %cmp4, label %5, label %4
 | 
				
			||||||
  %val5 = volatile load float* undef
 | 
					  %val5 = load volatile float* undef
 | 
				
			||||||
  %cmp5 = fcmp une float %val5, undef
 | 
					  %cmp5 = fcmp une float %val5, undef
 | 
				
			||||||
  br i1 %cmp5, label %6, label %5
 | 
					  br i1 %cmp5, label %6, label %5
 | 
				
			||||||
  %val6 = volatile load float* undef
 | 
					  %val6 = load volatile float* undef
 | 
				
			||||||
  %cmp6 = fcmp une float %val6, undef
 | 
					  %cmp6 = fcmp une float %val6, undef
 | 
				
			||||||
  br i1 %cmp6, label %7, label %6
 | 
					  br i1 %cmp6, label %7, label %6
 | 
				
			||||||
  %val7 = volatile load float* undef
 | 
					  %val7 = load volatile float* undef
 | 
				
			||||||
  %cmp7 = fcmp une float %val7, undef
 | 
					  %cmp7 = fcmp une float %val7, undef
 | 
				
			||||||
  br i1 %cmp7, label %8, label %7
 | 
					  br i1 %cmp7, label %8, label %7
 | 
				
			||||||
  %val8 = volatile load float* undef
 | 
					  %val8 = load volatile float* undef
 | 
				
			||||||
  %cmp8 = fcmp une float %val8, undef
 | 
					  %cmp8 = fcmp une float %val8, undef
 | 
				
			||||||
  br i1 %cmp8, label %9, label %8
 | 
					  br i1 %cmp8, label %9, label %8
 | 
				
			||||||
  %val9 = volatile load float* undef
 | 
					  %val9 = load volatile float* undef
 | 
				
			||||||
  %cmp9 = fcmp une float %val9, undef
 | 
					  %cmp9 = fcmp une float %val9, undef
 | 
				
			||||||
  br i1 %cmp9, label %10, label %9
 | 
					  br i1 %cmp9, label %10, label %9
 | 
				
			||||||
  %val10 = volatile load float* undef
 | 
					  %val10 = load volatile float* undef
 | 
				
			||||||
  %cmp10 = fcmp une float %val10, undef
 | 
					  %cmp10 = fcmp une float %val10, undef
 | 
				
			||||||
  br i1 %cmp10, label %11, label %10
 | 
					  br i1 %cmp10, label %11, label %10
 | 
				
			||||||
  %val11 = volatile load float* undef
 | 
					  %val11 = load volatile float* undef
 | 
				
			||||||
  %cmp11 = fcmp une float %val11, undef
 | 
					  %cmp11 = fcmp une float %val11, undef
 | 
				
			||||||
  br i1 %cmp11, label %12, label %11
 | 
					  br i1 %cmp11, label %12, label %11
 | 
				
			||||||
  %val12 = volatile load float* undef
 | 
					  %val12 = load volatile float* undef
 | 
				
			||||||
  %cmp12 = fcmp une float %val12, undef
 | 
					  %cmp12 = fcmp une float %val12, undef
 | 
				
			||||||
  br i1 %cmp12, label %13, label %12
 | 
					  br i1 %cmp12, label %13, label %12
 | 
				
			||||||
  %val13 = volatile load float* undef
 | 
					  %val13 = load volatile float* undef
 | 
				
			||||||
  %cmp13 = fcmp une float %val13, undef
 | 
					  %cmp13 = fcmp une float %val13, undef
 | 
				
			||||||
  br i1 %cmp13, label %14, label %13
 | 
					  br i1 %cmp13, label %14, label %13
 | 
				
			||||||
  %val14 = volatile load float* undef
 | 
					  %val14 = load volatile float* undef
 | 
				
			||||||
  %cmp14 = fcmp une float %val14, undef
 | 
					  %cmp14 = fcmp une float %val14, undef
 | 
				
			||||||
  br i1 %cmp14, label %15, label %14
 | 
					  br i1 %cmp14, label %15, label %14
 | 
				
			||||||
  %val15 = volatile load float* undef
 | 
					  %val15 = load volatile float* undef
 | 
				
			||||||
  %cmp15 = fcmp une float %val15, undef
 | 
					  %cmp15 = fcmp une float %val15, undef
 | 
				
			||||||
  br i1 %cmp15, label %16, label %15
 | 
					  br i1 %cmp15, label %16, label %15
 | 
				
			||||||
  %val16 = volatile load float* undef
 | 
					  %val16 = load volatile float* undef
 | 
				
			||||||
  %cmp16 = fcmp une float %val16, undef
 | 
					  %cmp16 = fcmp une float %val16, undef
 | 
				
			||||||
  br i1 %cmp16, label %17, label %16
 | 
					  br i1 %cmp16, label %17, label %16
 | 
				
			||||||
  %val17 = volatile load float* undef
 | 
					  %val17 = load volatile float* undef
 | 
				
			||||||
  %cmp17 = fcmp une float %val17, undef
 | 
					  %cmp17 = fcmp une float %val17, undef
 | 
				
			||||||
  br i1 %cmp17, label %18, label %17
 | 
					  br i1 %cmp17, label %18, label %17
 | 
				
			||||||
  %val18 = volatile load float* undef
 | 
					  %val18 = load volatile float* undef
 | 
				
			||||||
  %cmp18 = fcmp une float %val18, undef
 | 
					  %cmp18 = fcmp une float %val18, undef
 | 
				
			||||||
  br i1 %cmp18, label %19, label %18
 | 
					  br i1 %cmp18, label %19, label %18
 | 
				
			||||||
  %val19 = volatile load float* undef
 | 
					  %val19 = load volatile float* undef
 | 
				
			||||||
  %cmp19 = fcmp une float %val19, undef
 | 
					  %cmp19 = fcmp une float %val19, undef
 | 
				
			||||||
  br i1 %cmp19, label %20, label %19
 | 
					  br i1 %cmp19, label %20, label %19
 | 
				
			||||||
  %val20 = volatile load float* undef
 | 
					  %val20 = load volatile float* undef
 | 
				
			||||||
  %cmp20 = fcmp une float %val20, undef
 | 
					  %cmp20 = fcmp une float %val20, undef
 | 
				
			||||||
  br i1 %cmp20, label %21, label %20
 | 
					  br i1 %cmp20, label %21, label %20
 | 
				
			||||||
  %val21 = volatile load float* undef
 | 
					  %val21 = load volatile float* undef
 | 
				
			||||||
  %cmp21 = fcmp une float %val21, undef
 | 
					  %cmp21 = fcmp une float %val21, undef
 | 
				
			||||||
  br i1 %cmp21, label %22, label %21
 | 
					  br i1 %cmp21, label %22, label %21
 | 
				
			||||||
  %val22 = volatile load float* undef
 | 
					  %val22 = load volatile float* undef
 | 
				
			||||||
  %cmp22 = fcmp une float %val22, undef
 | 
					  %cmp22 = fcmp une float %val22, undef
 | 
				
			||||||
  br i1 %cmp22, label %23, label %22
 | 
					  br i1 %cmp22, label %23, label %22
 | 
				
			||||||
  %val23 = volatile load float* undef
 | 
					  %val23 = load volatile float* undef
 | 
				
			||||||
  %cmp23 = fcmp une float %val23, undef
 | 
					  %cmp23 = fcmp une float %val23, undef
 | 
				
			||||||
  br i1 %cmp23, label %24, label %23
 | 
					  br i1 %cmp23, label %24, label %23
 | 
				
			||||||
  %val24 = volatile load float* undef
 | 
					  %val24 = load volatile float* undef
 | 
				
			||||||
  %cmp24 = fcmp une float %val24, undef
 | 
					  %cmp24 = fcmp une float %val24, undef
 | 
				
			||||||
  br i1 %cmp24, label %25, label %24
 | 
					  br i1 %cmp24, label %25, label %24
 | 
				
			||||||
  %val25 = volatile load float* undef
 | 
					  %val25 = load volatile float* undef
 | 
				
			||||||
  %cmp25 = fcmp une float %val25, undef
 | 
					  %cmp25 = fcmp une float %val25, undef
 | 
				
			||||||
  br i1 %cmp25, label %26, label %25
 | 
					  br i1 %cmp25, label %26, label %25
 | 
				
			||||||
  %val26 = volatile load float* undef
 | 
					  %val26 = load volatile float* undef
 | 
				
			||||||
  %cmp26 = fcmp une float %val26, undef
 | 
					  %cmp26 = fcmp une float %val26, undef
 | 
				
			||||||
  br i1 %cmp26, label %27, label %26
 | 
					  br i1 %cmp26, label %27, label %26
 | 
				
			||||||
  %val27 = volatile load float* undef
 | 
					  %val27 = load volatile float* undef
 | 
				
			||||||
  %cmp27 = fcmp une float %val27, undef
 | 
					  %cmp27 = fcmp une float %val27, undef
 | 
				
			||||||
  br i1 %cmp27, label %28, label %27
 | 
					  br i1 %cmp27, label %28, label %27
 | 
				
			||||||
  %val28 = volatile load float* undef
 | 
					  %val28 = load volatile float* undef
 | 
				
			||||||
  %cmp28 = fcmp une float %val28, undef
 | 
					  %cmp28 = fcmp une float %val28, undef
 | 
				
			||||||
  br i1 %cmp28, label %29, label %28
 | 
					  br i1 %cmp28, label %29, label %28
 | 
				
			||||||
  %val29 = volatile load float* undef
 | 
					  %val29 = load volatile float* undef
 | 
				
			||||||
  %cmp29 = fcmp une float %val29, undef
 | 
					  %cmp29 = fcmp une float %val29, undef
 | 
				
			||||||
  br i1 %cmp29, label %30, label %29
 | 
					  br i1 %cmp29, label %30, label %29
 | 
				
			||||||
  %val30 = volatile load float* undef
 | 
					  %val30 = load volatile float* undef
 | 
				
			||||||
  %cmp30 = fcmp une float %val30, undef
 | 
					  %cmp30 = fcmp une float %val30, undef
 | 
				
			||||||
  br i1 %cmp30, label %31, label %30
 | 
					  br i1 %cmp30, label %31, label %30
 | 
				
			||||||
  %val31 = volatile load float* undef
 | 
					  %val31 = load volatile float* undef
 | 
				
			||||||
  %cmp31 = fcmp une float %val31, undef
 | 
					  %cmp31 = fcmp une float %val31, undef
 | 
				
			||||||
  br i1 %cmp31, label %32, label %31
 | 
					  br i1 %cmp31, label %32, label %31
 | 
				
			||||||
  %val32 = volatile load float* undef
 | 
					  %val32 = load volatile float* undef
 | 
				
			||||||
  %cmp32 = fcmp une float %val32, undef
 | 
					  %cmp32 = fcmp une float %val32, undef
 | 
				
			||||||
  br i1 %cmp32, label %33, label %32
 | 
					  br i1 %cmp32, label %33, label %32
 | 
				
			||||||
  %val33 = volatile load float* undef
 | 
					  %val33 = load volatile float* undef
 | 
				
			||||||
  %cmp33 = fcmp une float %val33, undef
 | 
					  %cmp33 = fcmp une float %val33, undef
 | 
				
			||||||
  br i1 %cmp33, label %34, label %33
 | 
					  br i1 %cmp33, label %34, label %33
 | 
				
			||||||
  %val34 = volatile load float* undef
 | 
					  %val34 = load volatile float* undef
 | 
				
			||||||
  %cmp34 = fcmp une float %val34, undef
 | 
					  %cmp34 = fcmp une float %val34, undef
 | 
				
			||||||
  br i1 %cmp34, label %35, label %34
 | 
					  br i1 %cmp34, label %35, label %34
 | 
				
			||||||
  %val35 = volatile load float* undef
 | 
					  %val35 = load volatile float* undef
 | 
				
			||||||
  %cmp35 = fcmp une float %val35, undef
 | 
					  %cmp35 = fcmp une float %val35, undef
 | 
				
			||||||
  br i1 %cmp35, label %36, label %35
 | 
					  br i1 %cmp35, label %36, label %35
 | 
				
			||||||
  %val36 = volatile load float* undef
 | 
					  %val36 = load volatile float* undef
 | 
				
			||||||
  %cmp36 = fcmp une float %val36, undef
 | 
					  %cmp36 = fcmp une float %val36, undef
 | 
				
			||||||
  br i1 %cmp36, label %37, label %36
 | 
					  br i1 %cmp36, label %37, label %36
 | 
				
			||||||
  %val37 = volatile load float* undef
 | 
					  %val37 = load volatile float* undef
 | 
				
			||||||
  %cmp37 = fcmp une float %val37, undef
 | 
					  %cmp37 = fcmp une float %val37, undef
 | 
				
			||||||
  br i1 %cmp37, label %38, label %37
 | 
					  br i1 %cmp37, label %38, label %37
 | 
				
			||||||
  %val38 = volatile load float* undef
 | 
					  %val38 = load volatile float* undef
 | 
				
			||||||
  %cmp38 = fcmp une float %val38, undef
 | 
					  %cmp38 = fcmp une float %val38, undef
 | 
				
			||||||
  br i1 %cmp38, label %39, label %38
 | 
					  br i1 %cmp38, label %39, label %38
 | 
				
			||||||
  %val39 = volatile load float* undef
 | 
					  %val39 = load volatile float* undef
 | 
				
			||||||
  %cmp39 = fcmp une float %val39, undef
 | 
					  %cmp39 = fcmp une float %val39, undef
 | 
				
			||||||
  br i1 %cmp39, label %40, label %39
 | 
					  br i1 %cmp39, label %40, label %39
 | 
				
			||||||
  %val40 = volatile load float* undef
 | 
					  %val40 = load volatile float* undef
 | 
				
			||||||
  %cmp40 = fcmp une float %val40, undef
 | 
					  %cmp40 = fcmp une float %val40, undef
 | 
				
			||||||
  br i1 %cmp40, label %41, label %40
 | 
					  br i1 %cmp40, label %41, label %40
 | 
				
			||||||
  %val41 = volatile load float* undef
 | 
					  %val41 = load volatile float* undef
 | 
				
			||||||
  %cmp41 = fcmp une float %val41, undef
 | 
					  %cmp41 = fcmp une float %val41, undef
 | 
				
			||||||
  br i1 %cmp41, label %42, label %41
 | 
					  br i1 %cmp41, label %42, label %41
 | 
				
			||||||
  %val42 = volatile load float* undef
 | 
					  %val42 = load volatile float* undef
 | 
				
			||||||
  %cmp42 = fcmp une float %val42, undef
 | 
					  %cmp42 = fcmp une float %val42, undef
 | 
				
			||||||
  br i1 %cmp42, label %43, label %42
 | 
					  br i1 %cmp42, label %43, label %42
 | 
				
			||||||
  %val43 = volatile load float* undef
 | 
					  %val43 = load volatile float* undef
 | 
				
			||||||
  %cmp43 = fcmp une float %val43, undef
 | 
					  %cmp43 = fcmp une float %val43, undef
 | 
				
			||||||
  br i1 %cmp43, label %44, label %43
 | 
					  br i1 %cmp43, label %44, label %43
 | 
				
			||||||
  %val44 = volatile load float* undef
 | 
					  %val44 = load volatile float* undef
 | 
				
			||||||
  %cmp44 = fcmp une float %val44, undef
 | 
					  %cmp44 = fcmp une float %val44, undef
 | 
				
			||||||
  br i1 %cmp44, label %45, label %44
 | 
					  br i1 %cmp44, label %45, label %44
 | 
				
			||||||
  %val45 = volatile load float* undef
 | 
					  %val45 = load volatile float* undef
 | 
				
			||||||
  %cmp45 = fcmp une float %val45, undef
 | 
					  %cmp45 = fcmp une float %val45, undef
 | 
				
			||||||
  br i1 %cmp45, label %46, label %45
 | 
					  br i1 %cmp45, label %46, label %45
 | 
				
			||||||
  %val46 = volatile load float* undef
 | 
					  %val46 = load volatile float* undef
 | 
				
			||||||
  %cmp46 = fcmp une float %val46, undef
 | 
					  %cmp46 = fcmp une float %val46, undef
 | 
				
			||||||
  br i1 %cmp46, label %47, label %46
 | 
					  br i1 %cmp46, label %47, label %46
 | 
				
			||||||
  %val47 = volatile load float* undef
 | 
					  %val47 = load volatile float* undef
 | 
				
			||||||
  %cmp47 = fcmp une float %val47, undef
 | 
					  %cmp47 = fcmp une float %val47, undef
 | 
				
			||||||
  br i1 %cmp47, label %48, label %47
 | 
					  br i1 %cmp47, label %48, label %47
 | 
				
			||||||
  %val48 = volatile load float* undef
 | 
					  %val48 = load volatile float* undef
 | 
				
			||||||
  %cmp48 = fcmp une float %val48, undef
 | 
					  %cmp48 = fcmp une float %val48, undef
 | 
				
			||||||
  br i1 %cmp48, label %49, label %48
 | 
					  br i1 %cmp48, label %49, label %48
 | 
				
			||||||
  %val49 = volatile load float* undef
 | 
					  %val49 = load volatile float* undef
 | 
				
			||||||
  %cmp49 = fcmp une float %val49, undef
 | 
					  %cmp49 = fcmp une float %val49, undef
 | 
				
			||||||
  br i1 %cmp49, label %50, label %49
 | 
					  br i1 %cmp49, label %50, label %49
 | 
				
			||||||
  %val50 = volatile load float* undef
 | 
					  %val50 = load volatile float* undef
 | 
				
			||||||
  %cmp50 = fcmp une float %val50, undef
 | 
					  %cmp50 = fcmp une float %val50, undef
 | 
				
			||||||
  br i1 %cmp50, label %51, label %50
 | 
					  br i1 %cmp50, label %51, label %50
 | 
				
			||||||
  %val51 = volatile load float* undef
 | 
					  %val51 = load volatile float* undef
 | 
				
			||||||
  %cmp51 = fcmp une float %val51, undef
 | 
					  %cmp51 = fcmp une float %val51, undef
 | 
				
			||||||
  br i1 %cmp51, label %52, label %51
 | 
					  br i1 %cmp51, label %52, label %51
 | 
				
			||||||
  %val52 = volatile load float* undef
 | 
					  %val52 = load volatile float* undef
 | 
				
			||||||
  %cmp52 = fcmp une float %val52, undef
 | 
					  %cmp52 = fcmp une float %val52, undef
 | 
				
			||||||
  br i1 %cmp52, label %53, label %52
 | 
					  br i1 %cmp52, label %53, label %52
 | 
				
			||||||
  %val53 = volatile load float* undef
 | 
					  %val53 = load volatile float* undef
 | 
				
			||||||
  %cmp53 = fcmp une float %val53, undef
 | 
					  %cmp53 = fcmp une float %val53, undef
 | 
				
			||||||
  br i1 %cmp53, label %54, label %53
 | 
					  br i1 %cmp53, label %54, label %53
 | 
				
			||||||
  %val54 = volatile load float* undef
 | 
					  %val54 = load volatile float* undef
 | 
				
			||||||
  %cmp54 = fcmp une float %val54, undef
 | 
					  %cmp54 = fcmp une float %val54, undef
 | 
				
			||||||
  br i1 %cmp54, label %55, label %54
 | 
					  br i1 %cmp54, label %55, label %54
 | 
				
			||||||
  %val55 = volatile load float* undef
 | 
					  %val55 = load volatile float* undef
 | 
				
			||||||
  %cmp55 = fcmp une float %val55, undef
 | 
					  %cmp55 = fcmp une float %val55, undef
 | 
				
			||||||
  br i1 %cmp55, label %56, label %55
 | 
					  br i1 %cmp55, label %56, label %55
 | 
				
			||||||
  %val56 = volatile load float* undef
 | 
					  %val56 = load volatile float* undef
 | 
				
			||||||
  %cmp56 = fcmp une float %val56, undef
 | 
					  %cmp56 = fcmp une float %val56, undef
 | 
				
			||||||
  br i1 %cmp56, label %57, label %56
 | 
					  br i1 %cmp56, label %57, label %56
 | 
				
			||||||
  %val57 = volatile load float* undef
 | 
					  %val57 = load volatile float* undef
 | 
				
			||||||
  %cmp57 = fcmp une float %val57, undef
 | 
					  %cmp57 = fcmp une float %val57, undef
 | 
				
			||||||
  br i1 %cmp57, label %58, label %57
 | 
					  br i1 %cmp57, label %58, label %57
 | 
				
			||||||
  %val58 = volatile load float* undef
 | 
					  %val58 = load volatile float* undef
 | 
				
			||||||
  %cmp58 = fcmp une float %val58, undef
 | 
					  %cmp58 = fcmp une float %val58, undef
 | 
				
			||||||
  br i1 %cmp58, label %59, label %58
 | 
					  br i1 %cmp58, label %59, label %58
 | 
				
			||||||
  %val59 = volatile load float* undef
 | 
					  %val59 = load volatile float* undef
 | 
				
			||||||
  %cmp59 = fcmp une float %val59, undef
 | 
					  %cmp59 = fcmp une float %val59, undef
 | 
				
			||||||
  br i1 %cmp59, label %60, label %59
 | 
					  br i1 %cmp59, label %60, label %59
 | 
				
			||||||
  %val60 = volatile load float* undef
 | 
					  %val60 = load volatile float* undef
 | 
				
			||||||
  %cmp60 = fcmp une float %val60, undef
 | 
					  %cmp60 = fcmp une float %val60, undef
 | 
				
			||||||
  br i1 %cmp60, label %61, label %60
 | 
					  br i1 %cmp60, label %61, label %60
 | 
				
			||||||
  %val61 = volatile load float* undef
 | 
					  %val61 = load volatile float* undef
 | 
				
			||||||
  %cmp61 = fcmp une float %val61, undef
 | 
					  %cmp61 = fcmp une float %val61, undef
 | 
				
			||||||
  br i1 %cmp61, label %62, label %61
 | 
					  br i1 %cmp61, label %62, label %61
 | 
				
			||||||
  %val62 = volatile load float* undef
 | 
					  %val62 = load volatile float* undef
 | 
				
			||||||
  %cmp62 = fcmp une float %val62, undef
 | 
					  %cmp62 = fcmp une float %val62, undef
 | 
				
			||||||
  br i1 %cmp62, label %63, label %62
 | 
					  br i1 %cmp62, label %63, label %62
 | 
				
			||||||
  %val63 = volatile load float* undef
 | 
					  %val63 = load volatile float* undef
 | 
				
			||||||
  %cmp63 = fcmp une float %val63, undef
 | 
					  %cmp63 = fcmp une float %val63, undef
 | 
				
			||||||
  br i1 %cmp63, label %64, label %63
 | 
					  br i1 %cmp63, label %64, label %63
 | 
				
			||||||
  %val64 = volatile load float* undef
 | 
					  %val64 = load volatile float* undef
 | 
				
			||||||
  %cmp64 = fcmp une float %val64, undef
 | 
					  %cmp64 = fcmp une float %val64, undef
 | 
				
			||||||
  br i1 %cmp64, label %65, label %64
 | 
					  br i1 %cmp64, label %65, label %64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -84,7 +84,7 @@ entry:
 | 
				
			|||||||
  br i1 %3, label %func_4.exit.i, label %bb.i.i.i
 | 
					  br i1 %3, label %func_4.exit.i, label %bb.i.i.i
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb.i.i.i:                                         ; preds = %entry
 | 
					bb.i.i.i:                                         ; preds = %entry
 | 
				
			||||||
  %4 = volatile load i8* @g_100, align 1          ; <i8> [#uses=0]
 | 
					  %4 = load volatile i8* @g_100, align 1          ; <i8> [#uses=0]
 | 
				
			||||||
  br label %func_4.exit.i
 | 
					  br label %func_4.exit.i
 | 
				
			||||||
 | 
					
 | 
				
			||||||
; CHECK: test4:
 | 
					; CHECK: test4:
 | 
				
			||||||
@@ -101,7 +101,7 @@ func_4.exit.i:                                    ; preds = %bb.i.i.i, %entry
 | 
				
			|||||||
  br i1 %brmerge.i, label %func_1.exit, label %bb.i.i
 | 
					  br i1 %brmerge.i, label %func_1.exit, label %bb.i.i
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb.i.i:                                           ; preds = %func_4.exit.i
 | 
					bb.i.i:                                           ; preds = %func_4.exit.i
 | 
				
			||||||
  %5 = volatile load i8* @g_100, align 1          ; <i8> [#uses=0]
 | 
					  %5 = load volatile i8* @g_100, align 1          ; <i8> [#uses=0]
 | 
				
			||||||
  br label %func_1.exit
 | 
					  br label %func_1.exit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func_1.exit:                                      ; preds = %bb.i.i, %func_4.exit.i
 | 
					func_1.exit:                                      ; preds = %bb.i.i, %func_4.exit.i
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,6 +21,6 @@ bb:		; preds = %bb, %entry
 | 
				
			|||||||
	br i1 %exitcond, label %bb13, label %bb
 | 
						br i1 %exitcond, label %bb13, label %bb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb13:		; preds = %bb
 | 
					bb13:		; preds = %bb
 | 
				
			||||||
	volatile store float %tmp6, float* @G, align 4
 | 
						store volatile float %tmp6, float* @G, align 4
 | 
				
			||||||
	ret void
 | 
						ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,16 +6,16 @@
 | 
				
			|||||||
; Chain and flag folding issues.
 | 
					; Chain and flag folding issues.
 | 
				
			||||||
define i32 @test1() nounwind ssp {
 | 
					define i32 @test1() nounwind ssp {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
  %tmp5.i = volatile load i32* undef              ; <i32> [#uses=1]
 | 
					  %tmp5.i = load volatile i32* undef              ; <i32> [#uses=1]
 | 
				
			||||||
  %conv.i = zext i32 %tmp5.i to i64               ; <i64> [#uses=1]
 | 
					  %conv.i = zext i32 %tmp5.i to i64               ; <i64> [#uses=1]
 | 
				
			||||||
  %tmp12.i = volatile load i32* undef             ; <i32> [#uses=1]
 | 
					  %tmp12.i = load volatile i32* undef             ; <i32> [#uses=1]
 | 
				
			||||||
  %conv13.i = zext i32 %tmp12.i to i64            ; <i64> [#uses=1]
 | 
					  %conv13.i = zext i32 %tmp12.i to i64            ; <i64> [#uses=1]
 | 
				
			||||||
  %shl.i = shl i64 %conv13.i, 32                  ; <i64> [#uses=1]
 | 
					  %shl.i = shl i64 %conv13.i, 32                  ; <i64> [#uses=1]
 | 
				
			||||||
  %or.i = or i64 %shl.i, %conv.i                  ; <i64> [#uses=1]
 | 
					  %or.i = or i64 %shl.i, %conv.i                  ; <i64> [#uses=1]
 | 
				
			||||||
  %add16.i = add i64 %or.i, 256                   ; <i64> [#uses=1]
 | 
					  %add16.i = add i64 %or.i, 256                   ; <i64> [#uses=1]
 | 
				
			||||||
  %shr.i = lshr i64 %add16.i, 8                   ; <i64> [#uses=1]
 | 
					  %shr.i = lshr i64 %add16.i, 8                   ; <i64> [#uses=1]
 | 
				
			||||||
  %conv19.i = trunc i64 %shr.i to i32             ; <i32> [#uses=1]
 | 
					  %conv19.i = trunc i64 %shr.i to i32             ; <i32> [#uses=1]
 | 
				
			||||||
  volatile store i32 %conv19.i, i32* undef
 | 
					  store volatile i32 %conv19.i, i32* undef
 | 
				
			||||||
  ret i32 undef
 | 
					  ret i32 undef
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ entry:
 | 
				
			|||||||
	%tmp13 = tail call double @foo()
 | 
						%tmp13 = tail call double @foo()
 | 
				
			||||||
	%tmp1314 = fptrunc double %tmp13 to float		; <float> [#uses=1]
 | 
						%tmp1314 = fptrunc double %tmp13 to float		; <float> [#uses=1]
 | 
				
			||||||
	%tmp3940 = fpext float %tmp1314 to double		; <double> [#uses=1]
 | 
						%tmp3940 = fpext float %tmp1314 to double		; <double> [#uses=1]
 | 
				
			||||||
	volatile store double %tmp3940, double* %b
 | 
						store volatile double %tmp3940, double* %b
 | 
				
			||||||
	ret void
 | 
						ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,9 +11,9 @@ entry:
 | 
				
			|||||||
bb:		; preds = %bb, %entry
 | 
					bb:		; preds = %bb, %entry
 | 
				
			||||||
	%i.014.0 = phi i32 [ 0, %entry ], [ %indvar.next, %bb ]		; <i32> [#uses=2]
 | 
						%i.014.0 = phi i32 [ 0, %entry ], [ %indvar.next, %bb ]		; <i32> [#uses=2]
 | 
				
			||||||
	%tmp1 = trunc i32 %i.014.0 to i16		; <i16> [#uses=2]
 | 
						%tmp1 = trunc i32 %i.014.0 to i16		; <i16> [#uses=2]
 | 
				
			||||||
	volatile store i16 %tmp1, i16* @X, align 2
 | 
						store volatile i16 %tmp1, i16* @X, align 2
 | 
				
			||||||
	%tmp34 = shl i16 %tmp1, 2		; <i16> [#uses=1]
 | 
						%tmp34 = shl i16 %tmp1, 2		; <i16> [#uses=1]
 | 
				
			||||||
	volatile store i16 %tmp34, i16* @Y, align 2
 | 
						store volatile i16 %tmp34, i16* @Y, align 2
 | 
				
			||||||
	%indvar.next = add i32 %i.014.0, 1		; <i32> [#uses=2]
 | 
						%indvar.next = add i32 %i.014.0, 1		; <i32> [#uses=2]
 | 
				
			||||||
	%exitcond = icmp eq i32 %indvar.next, %N		; <i1> [#uses=1]
 | 
						%exitcond = icmp eq i32 %indvar.next, %N		; <i1> [#uses=1]
 | 
				
			||||||
	br i1 %exitcond, label %return, label %bb
 | 
						br i1 %exitcond, label %return, label %bb
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,7 +19,7 @@ entry:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
loop:
 | 
					loop:
 | 
				
			||||||
  %i = phi i64 [ 0, %entry ], [ %i.next, %loop ]
 | 
					  %i = phi i64 [ 0, %entry ], [ %i.next, %loop ]
 | 
				
			||||||
  volatile store i64 %i, i64* %p
 | 
					  store volatile i64 %i, i64* %p
 | 
				
			||||||
  %i.next = add i64 %i, %s
 | 
					  %i.next = add i64 %i, %s
 | 
				
			||||||
  %c = icmp slt i64 %i.next, %n
 | 
					  %c = icmp slt i64 %i.next, %n
 | 
				
			||||||
  br i1 %c, label %loop, label %exit
 | 
					  br i1 %c, label %loop, label %exit
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@ entry:
 | 
				
			|||||||
bb:		; preds = %bb, %entry
 | 
					bb:		; preds = %bb, %entry
 | 
				
			||||||
	%i.03 = phi i32 [ 0, %entry ], [ %indvar.next, %bb ]		; <i32> [#uses=2]
 | 
						%i.03 = phi i32 [ 0, %entry ], [ %indvar.next, %bb ]		; <i32> [#uses=2]
 | 
				
			||||||
	%1 = trunc i32 %i.03 to i16		; <i16> [#uses=1]
 | 
						%1 = trunc i32 %i.03 to i16		; <i16> [#uses=1]
 | 
				
			||||||
	volatile store i16 %1, i16* @X, align 2
 | 
						store volatile i16 %1, i16* @X, align 2
 | 
				
			||||||
	%indvar.next = add i32 %i.03, 1		; <i32> [#uses=2]
 | 
						%indvar.next = add i32 %i.03, 1		; <i32> [#uses=2]
 | 
				
			||||||
	%exitcond = icmp eq i32 %indvar.next, %N		; <i1> [#uses=1]
 | 
						%exitcond = icmp eq i32 %indvar.next, %N		; <i1> [#uses=1]
 | 
				
			||||||
	br i1 %exitcond, label %return, label %bb
 | 
						br i1 %exitcond, label %return, label %bb
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -52,8 +52,8 @@ bb:		; preds = %bb23
 | 
				
			|||||||
	%tmp17 = ashr i64 %tmp16, %.cast		; <i64> [#uses=1]
 | 
						%tmp17 = ashr i64 %tmp16, %.cast		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp1718 = trunc i64 %tmp17 to i32		; <i32> [#uses=1]
 | 
						%tmp1718 = trunc i64 %tmp17 to i32		; <i32> [#uses=1]
 | 
				
			||||||
	%tmp19 = getelementptr [10 x i8]* @.str, i32 0, i32 0		; <i8*> [#uses=1]
 | 
						%tmp19 = getelementptr [10 x i8]* @.str, i32 0, i32 0		; <i8*> [#uses=1]
 | 
				
			||||||
	volatile store i32 %tmp1718, i32* @var
 | 
						store volatile i32 %tmp1718, i32* @var
 | 
				
			||||||
	volatile store i32 %tmp13, i32* @var
 | 
						store volatile i32 %tmp13, i32* @var
 | 
				
			||||||
	%tmp21 = load i32* %i, align 4		; <i32> [#uses=1]
 | 
						%tmp21 = load i32* %i, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	%tmp22 = add i32 %tmp21, 1		; <i32> [#uses=1]
 | 
						%tmp22 = add i32 %tmp21, 1		; <i32> [#uses=1]
 | 
				
			||||||
	store i32 %tmp22, i32* %i, align 4
 | 
						store i32 %tmp22, i32* %i, align 4
 | 
				
			||||||
@@ -86,7 +86,7 @@ bb28:		; preds = %bb46
 | 
				
			|||||||
	%tmp3940 = bitcast float* %tmp39 to i32*		; <i32*> [#uses=1]
 | 
						%tmp3940 = bitcast float* %tmp39 to i32*		; <i32*> [#uses=1]
 | 
				
			||||||
	%tmp41 = load i32* %tmp3940, align 4		; <i32> [#uses=1]
 | 
						%tmp41 = load i32* %tmp3940, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	%tmp42 = getelementptr [6 x i8]* @.str1, i32 0, i32 0		; <i8*> [#uses=1]
 | 
						%tmp42 = getelementptr [6 x i8]* @.str1, i32 0, i32 0		; <i8*> [#uses=1]
 | 
				
			||||||
	volatile store i32 %tmp41, i32* @var
 | 
						store volatile i32 %tmp41, i32* @var
 | 
				
			||||||
	%tmp44 = load i32* %i, align 4		; <i32> [#uses=1]
 | 
						%tmp44 = load i32* %i, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	%tmp45 = add i32 %tmp44, 1		; <i32> [#uses=1]
 | 
						%tmp45 = add i32 %tmp44, 1		; <i32> [#uses=1]
 | 
				
			||||||
	store i32 %tmp45, i32* %i, align 4
 | 
						store i32 %tmp45, i32* %i, align 4
 | 
				
			||||||
@@ -127,8 +127,8 @@ bb52:		; preds = %bb78
 | 
				
			|||||||
	%tmp72 = ashr i64 %tmp70, %.cast71		; <i64> [#uses=1]
 | 
						%tmp72 = ashr i64 %tmp70, %.cast71		; <i64> [#uses=1]
 | 
				
			||||||
	%tmp7273 = trunc i64 %tmp72 to i32		; <i32> [#uses=1]
 | 
						%tmp7273 = trunc i64 %tmp72 to i32		; <i32> [#uses=1]
 | 
				
			||||||
	%tmp74 = getelementptr [10 x i8]* @.str, i32 0, i32 0		; <i8*> [#uses=1]
 | 
						%tmp74 = getelementptr [10 x i8]* @.str, i32 0, i32 0		; <i8*> [#uses=1]
 | 
				
			||||||
	volatile store i32 %tmp7273, i32* @var
 | 
						store volatile i32 %tmp7273, i32* @var
 | 
				
			||||||
	volatile store i32 %tmp66, i32* @var
 | 
						store volatile i32 %tmp66, i32* @var
 | 
				
			||||||
	%tmp76 = load i32* %i, align 4		; <i32> [#uses=1]
 | 
						%tmp76 = load i32* %i, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	%tmp77 = add i32 %tmp76, 1		; <i32> [#uses=1]
 | 
						%tmp77 = add i32 %tmp76, 1		; <i32> [#uses=1]
 | 
				
			||||||
	store i32 %tmp77, i32* %i, align 4
 | 
						store i32 %tmp77, i32* %i, align 4
 | 
				
			||||||
@@ -161,7 +161,7 @@ bb84:		; preds = %bb101
 | 
				
			|||||||
	%tmp9495 = bitcast float* %tmp94 to i32*		; <i32*> [#uses=1]
 | 
						%tmp9495 = bitcast float* %tmp94 to i32*		; <i32*> [#uses=1]
 | 
				
			||||||
	%tmp96 = load i32* %tmp9495, align 4		; <i32> [#uses=1]
 | 
						%tmp96 = load i32* %tmp9495, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	%tmp97 = getelementptr [6 x i8]* @.str1, i32 0, i32 0		; <i8*> [#uses=1]
 | 
						%tmp97 = getelementptr [6 x i8]* @.str1, i32 0, i32 0		; <i8*> [#uses=1]
 | 
				
			||||||
	volatile store i32 %tmp96, i32* @var
 | 
						store volatile i32 %tmp96, i32* @var
 | 
				
			||||||
	%tmp99 = load i32* %i, align 4		; <i32> [#uses=1]
 | 
						%tmp99 = load i32* %i, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	%tmp100 = add i32 %tmp99, 1		; <i32> [#uses=1]
 | 
						%tmp100 = add i32 %tmp99, 1		; <i32> [#uses=1]
 | 
				
			||||||
	store i32 %tmp100, i32* %i, align 4
 | 
						store i32 %tmp100, i32* %i, align 4
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,7 +67,7 @@ declare void @exit(i32) noreturn
 | 
				
			|||||||
; DAG Combiner can't fold this into a load of the 1'th byte.
 | 
					; DAG Combiner can't fold this into a load of the 1'th byte.
 | 
				
			||||||
; PR8757
 | 
					; PR8757
 | 
				
			||||||
define i32 @test3(i32 *%P) nounwind ssp {
 | 
					define i32 @test3(i32 *%P) nounwind ssp {
 | 
				
			||||||
  volatile store i32 128, i32* %P
 | 
					  store volatile i32 128, i32* %P
 | 
				
			||||||
  %tmp4.pre = load i32* %P
 | 
					  %tmp4.pre = load i32* %P
 | 
				
			||||||
  %phitmp = trunc i32 %tmp4.pre to i16
 | 
					  %phitmp = trunc i32 %tmp4.pre to i16
 | 
				
			||||||
  %phitmp13 = shl i16 %phitmp, 8
 | 
					  %phitmp13 = shl i16 %phitmp, 8
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
define i32 @test1(i32 %X) {
 | 
					define i32 @test1(i32 %X) {
 | 
				
			||||||
        %Z = shl i32 %X, 2              ; <i32> [#uses=1]
 | 
					        %Z = shl i32 %X, 2              ; <i32> [#uses=1]
 | 
				
			||||||
        volatile store i32 %Z, i32* @G
 | 
					        store volatile i32 %Z, i32* @G
 | 
				
			||||||
        ret i32 %X
 | 
					        ret i32 %X
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,7 +33,7 @@ declare i32 @__cxa_atexit(void (i8*)*, i8*, i8*)
 | 
				
			|||||||
define i32 @main() {
 | 
					define i32 @main() {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
; CHECK: flds
 | 
					; CHECK: flds
 | 
				
			||||||
	%tmp6 = volatile load float* @a		; <float> [#uses=1]
 | 
						%tmp6 = load volatile float* @a		; <float> [#uses=1]
 | 
				
			||||||
; CHECK: fstps (%esp)
 | 
					; CHECK: fstps (%esp)
 | 
				
			||||||
; CHECK: tanf
 | 
					; CHECK: tanf
 | 
				
			||||||
	%tmp9 = tail call float @tanf( float %tmp6 )		; <float> [#uses=1]
 | 
						%tmp9 = tail call float @tanf( float %tmp6 )		; <float> [#uses=1]
 | 
				
			||||||
@@ -41,7 +41,7 @@ entry:
 | 
				
			|||||||
; CHECK: fstp
 | 
					; CHECK: fstp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
; CHECK: fldl
 | 
					; CHECK: fldl
 | 
				
			||||||
	%tmp12 = volatile load double* @b		; <double> [#uses=1]
 | 
						%tmp12 = load volatile double* @b		; <double> [#uses=1]
 | 
				
			||||||
; CHECK: fstpl (%esp)
 | 
					; CHECK: fstpl (%esp)
 | 
				
			||||||
; CHECK: tan
 | 
					; CHECK: tan
 | 
				
			||||||
	%tmp13 = tail call double @tan( double %tmp12 )		; <double> [#uses=1]
 | 
						%tmp13 = tail call double @tan( double %tmp12 )		; <double> [#uses=1]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,17 +15,17 @@ define void @loop_2() nounwind  {
 | 
				
			|||||||
; CHECK-NEXT: addl $3, (%{{.*}})
 | 
					; CHECK-NEXT: addl $3, (%{{.*}})
 | 
				
			||||||
; CHECK-NEXT: ret
 | 
					; CHECK-NEXT: ret
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  %tmp = volatile load i32* @x, align 4           ; <i32> [#uses=1]
 | 
					  %tmp = load volatile i32* @x, align 4           ; <i32> [#uses=1]
 | 
				
			||||||
  %tmp1 = add i32 %tmp, 3         ; <i32> [#uses=1]
 | 
					  %tmp1 = add i32 %tmp, 3         ; <i32> [#uses=1]
 | 
				
			||||||
  volatile store i32 %tmp1, i32* @x, align 4
 | 
					  store volatile i32 %tmp1, i32* @x, align 4
 | 
				
			||||||
  %tmp.1 = volatile load i32* @x, align 4         ; <i32> [#uses=1]
 | 
					  %tmp.1 = load volatile i32* @x, align 4         ; <i32> [#uses=1]
 | 
				
			||||||
  %tmp1.1 = add i32 %tmp.1, 3             ; <i32> [#uses=1]
 | 
					  %tmp1.1 = add i32 %tmp.1, 3             ; <i32> [#uses=1]
 | 
				
			||||||
  volatile store i32 %tmp1.1, i32* @x, align 4
 | 
					  store volatile i32 %tmp1.1, i32* @x, align 4
 | 
				
			||||||
  %tmp.2 = volatile load i32* @x, align 4         ; <i32> [#uses=1]
 | 
					  %tmp.2 = load volatile i32* @x, align 4         ; <i32> [#uses=1]
 | 
				
			||||||
  %tmp1.2 = add i32 %tmp.2, 3             ; <i32> [#uses=1]
 | 
					  %tmp1.2 = add i32 %tmp.2, 3             ; <i32> [#uses=1]
 | 
				
			||||||
  volatile store i32 %tmp1.2, i32* @x, align 4
 | 
					  store volatile i32 %tmp1.2, i32* @x, align 4
 | 
				
			||||||
  %tmp.3 = volatile load i32* @x, align 4         ; <i32> [#uses=1]
 | 
					  %tmp.3 = load volatile i32* @x, align 4         ; <i32> [#uses=1]
 | 
				
			||||||
  %tmp1.3 = add i32 %tmp.3, 3             ; <i32> [#uses=1]
 | 
					  %tmp1.3 = add i32 %tmp.3, 3             ; <i32> [#uses=1]
 | 
				
			||||||
  volatile store i32 %tmp1.3, i32* @x, align 4
 | 
					  store volatile i32 %tmp1.3, i32* @x, align 4
 | 
				
			||||||
  ret void
 | 
					  ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,10 +8,10 @@ define i64 @t(i64 %A, i64 %B, i32* %P, i64 *%P2) nounwind {
 | 
				
			|||||||
; CHECK: movl %eax
 | 
					; CHECK: movl %eax
 | 
				
			||||||
  %C = add i64 %A, %B
 | 
					  %C = add i64 %A, %B
 | 
				
			||||||
  %D = trunc i64 %C to i32
 | 
					  %D = trunc i64 %C to i32
 | 
				
			||||||
  volatile store i32 %D, i32* %P
 | 
					  store volatile i32 %D, i32* %P
 | 
				
			||||||
  %E = shl i64 %C, 32
 | 
					  %E = shl i64 %C, 32
 | 
				
			||||||
  %F = ashr i64 %E, 32  
 | 
					  %F = ashr i64 %E, 32  
 | 
				
			||||||
  volatile store i64 %F, i64 *%P2
 | 
					  store volatile i64 %F, i64 *%P2
 | 
				
			||||||
  volatile store i32 %D, i32* %P
 | 
					  store volatile i32 %D, i32* %P
 | 
				
			||||||
  ret i64 undef
 | 
					  ret i64 undef
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,13 +11,13 @@ define void @test({ double, double }* byval  %z, double* %P) nounwind {
 | 
				
			|||||||
entry:
 | 
					entry:
 | 
				
			||||||
	%tmp3 = load double* @G, align 16		; <double> [#uses=1]
 | 
						%tmp3 = load double* @G, align 16		; <double> [#uses=1]
 | 
				
			||||||
	%tmp4 = tail call double @fabs( double %tmp3 )		; <double> [#uses=1]
 | 
						%tmp4 = tail call double @fabs( double %tmp3 )		; <double> [#uses=1]
 | 
				
			||||||
        volatile store double %tmp4, double* %P
 | 
					        store volatile double %tmp4, double* %P
 | 
				
			||||||
	%tmp = getelementptr { double, double }* %z, i32 0, i32 0		; <double*> [#uses=1]
 | 
						%tmp = getelementptr { double, double }* %z, i32 0, i32 0		; <double*> [#uses=1]
 | 
				
			||||||
	%tmp1 = volatile load double* %tmp, align 8		; <double> [#uses=1]
 | 
						%tmp1 = load volatile double* %tmp, align 8		; <double> [#uses=1]
 | 
				
			||||||
	%tmp2 = tail call double @fabs( double %tmp1 )		; <double> [#uses=1]
 | 
						%tmp2 = tail call double @fabs( double %tmp1 )		; <double> [#uses=1]
 | 
				
			||||||
    ; CHECK: andpd{{.*}}4(%esp), %xmm
 | 
					    ; CHECK: andpd{{.*}}4(%esp), %xmm
 | 
				
			||||||
	%tmp6 = fadd double %tmp4, %tmp2		; <double> [#uses=1]
 | 
						%tmp6 = fadd double %tmp4, %tmp2		; <double> [#uses=1]
 | 
				
			||||||
	volatile store double %tmp6, double* %P, align 8
 | 
						store volatile double %tmp6, double* %P, align 8
 | 
				
			||||||
	ret void
 | 
						ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
define void @foo() nounwind {
 | 
					define void @foo() nounwind {
 | 
				
			||||||
  %1 = alloca %testType
 | 
					  %1 = alloca %testType
 | 
				
			||||||
  volatile store %testType {i32 1, [0 x i32] zeroinitializer, i32 2}, %testType* %1
 | 
					  store volatile %testType {i32 1, [0 x i32] zeroinitializer, i32 2}, %testType* %1
 | 
				
			||||||
  ret void
 | 
					  ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -314,7 +314,7 @@ bby:
 | 
				
			|||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb7:
 | 
					bb7:
 | 
				
			||||||
  volatile store i32 0, i32* @XYZ
 | 
					  store volatile i32 0, i32* @XYZ
 | 
				
			||||||
  unreachable
 | 
					  unreachable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bbx:
 | 
					bbx:
 | 
				
			||||||
@@ -323,7 +323,7 @@ bbx:
 | 
				
			|||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb12:
 | 
					bb12:
 | 
				
			||||||
  volatile store i32 0, i32* @XYZ
 | 
					  store volatile i32 0, i32* @XYZ
 | 
				
			||||||
  unreachable
 | 
					  unreachable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
return:
 | 
					return:
 | 
				
			||||||
@@ -352,8 +352,8 @@ bby:
 | 
				
			|||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb7:
 | 
					bb7:
 | 
				
			||||||
  volatile store i32 0, i32* @XYZ
 | 
					  store volatile i32 0, i32* @XYZ
 | 
				
			||||||
  volatile store i32 1, i32* @XYZ
 | 
					  store volatile i32 1, i32* @XYZ
 | 
				
			||||||
  unreachable
 | 
					  unreachable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bbx:
 | 
					bbx:
 | 
				
			||||||
@@ -362,8 +362,8 @@ bbx:
 | 
				
			|||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb12:
 | 
					bb12:
 | 
				
			||||||
  volatile store i32 0, i32* @XYZ
 | 
					  store volatile i32 0, i32* @XYZ
 | 
				
			||||||
  volatile store i32 1, i32* @XYZ
 | 
					  store volatile i32 1, i32* @XYZ
 | 
				
			||||||
  unreachable
 | 
					  unreachable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
return:
 | 
					return:
 | 
				
			||||||
@@ -390,8 +390,8 @@ bby:
 | 
				
			|||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb7:
 | 
					bb7:
 | 
				
			||||||
  volatile store i32 0, i32* @XYZ
 | 
					  store volatile i32 0, i32* @XYZ
 | 
				
			||||||
  volatile store i32 1, i32* @XYZ
 | 
					  store volatile i32 1, i32* @XYZ
 | 
				
			||||||
  unreachable
 | 
					  unreachable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bbx:
 | 
					bbx:
 | 
				
			||||||
@@ -400,8 +400,8 @@ bbx:
 | 
				
			|||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb12:
 | 
					bb12:
 | 
				
			||||||
  volatile store i32 0, i32* @XYZ
 | 
					  store volatile i32 0, i32* @XYZ
 | 
				
			||||||
  volatile store i32 1, i32* @XYZ
 | 
					  store volatile i32 1, i32* @XYZ
 | 
				
			||||||
  unreachable
 | 
					  unreachable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
return:
 | 
					return:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,7 @@ define i32 @test1(i32 %X) nounwind {
 | 
				
			|||||||
; CHECK-NOT: mov
 | 
					; CHECK-NOT: mov
 | 
				
			||||||
; CHECK: leal 1(%rdi)
 | 
					; CHECK: leal 1(%rdi)
 | 
				
			||||||
        %Z = add i32 %X, 1
 | 
					        %Z = add i32 %X, 1
 | 
				
			||||||
        volatile store i32 %Z, i32* @G
 | 
					        store volatile i32 %Z, i32* @G
 | 
				
			||||||
        ret i32 %X
 | 
					        ret i32 %X
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@ define i32 @t() nounwind {
 | 
				
			|||||||
entry:
 | 
					entry:
 | 
				
			||||||
	%a = alloca <4 x i32>		; <<4 x i32>*> [#uses=2]
 | 
						%a = alloca <4 x i32>		; <<4 x i32>*> [#uses=2]
 | 
				
			||||||
	%b = alloca <4 x i32>		; <<4 x i32>*> [#uses=5]
 | 
						%b = alloca <4 x i32>		; <<4 x i32>*> [#uses=5]
 | 
				
			||||||
	volatile store <4 x i32> < i32 0, i32 1, i32 2, i32 3 >, <4 x i32>* %a
 | 
						store volatile <4 x i32> < i32 0, i32 1, i32 2, i32 3 >, <4 x i32>* %a
 | 
				
			||||||
	%tmp = load <4 x i32>* %a		; <<4 x i32>> [#uses=1]
 | 
						%tmp = load <4 x i32>* %a		; <<4 x i32>> [#uses=1]
 | 
				
			||||||
	store <4 x i32> %tmp, <4 x i32>* %b
 | 
						store <4 x i32> %tmp, <4 x i32>* %b
 | 
				
			||||||
	%tmp1 = load <4 x i32>* %b		; <<4 x i32>> [#uses=1]
 | 
						%tmp1 = load <4 x i32>* %b		; <<4 x i32>> [#uses=1]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@ entry:
 | 
				
			|||||||
; CHECK: punpckldq
 | 
					; CHECK: punpckldq
 | 
				
			||||||
	%a = alloca <4 x i32>		; <<4 x i32>*> [#uses=2]
 | 
						%a = alloca <4 x i32>		; <<4 x i32>*> [#uses=2]
 | 
				
			||||||
	%b = alloca <4 x i32>		; <<4 x i32>*> [#uses=5]
 | 
						%b = alloca <4 x i32>		; <<4 x i32>*> [#uses=5]
 | 
				
			||||||
	volatile store <4 x i32> < i32 0, i32 1, i32 2, i32 3 >, <4 x i32>* %a
 | 
						store volatile <4 x i32> < i32 0, i32 1, i32 2, i32 3 >, <4 x i32>* %a
 | 
				
			||||||
	%tmp = load <4 x i32>* %a		; <<4 x i32>> [#uses=1]
 | 
						%tmp = load <4 x i32>* %a		; <<4 x i32>> [#uses=1]
 | 
				
			||||||
	store <4 x i32> %tmp, <4 x i32>* %b
 | 
						store <4 x i32> %tmp, <4 x i32>* %b
 | 
				
			||||||
	%tmp1 = load <4 x i32>* %b		; <<4 x i32>> [#uses=1]
 | 
						%tmp1 = load <4 x i32>* %b		; <<4 x i32>> [#uses=1]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,14 +4,14 @@
 | 
				
			|||||||
@x = external global double
 | 
					@x = external global double
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define void @foo() nounwind  {
 | 
					define void @foo() nounwind  {
 | 
				
			||||||
  %a = volatile load double* @x
 | 
					  %a = load volatile double* @x
 | 
				
			||||||
  volatile store double 0.0, double* @x
 | 
					  store volatile double 0.0, double* @x
 | 
				
			||||||
  volatile store double 0.0, double* @x
 | 
					  store volatile double 0.0, double* @x
 | 
				
			||||||
  %b = volatile load double* @x
 | 
					  %b = load volatile double* @x
 | 
				
			||||||
  ret void
 | 
					  ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define void @bar() nounwind  {
 | 
					define void @bar() nounwind  {
 | 
				
			||||||
  %c = volatile load double* @x
 | 
					  %c = load volatile double* @x
 | 
				
			||||||
  ret void
 | 
					  ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,6 +13,6 @@ entry:
 | 
				
			|||||||
  br label %bb
 | 
					  br label %bb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb:                                               ; preds = %bb, %entry
 | 
					bb:                                               ; preds = %bb, %entry
 | 
				
			||||||
  volatile store i32 525509670, i32* %p, align 4
 | 
					  store volatile i32 525509670, i32* %p, align 4
 | 
				
			||||||
  br label %bb
 | 
					  br label %bb
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,32 +18,32 @@ entry:
 | 
				
			|||||||
	%x = alloca [100 x i32], align 4		; <[100 x i32]*> [#uses=2]
 | 
						%x = alloca [100 x i32], align 4		; <[100 x i32]*> [#uses=2]
 | 
				
			||||||
	%0 = load i32* @size, align 4		; <i32> [#uses=1]
 | 
						%0 = load i32* @size, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	%1 = alloca i32, i32 %0, align 4		; <i32*> [#uses=1]
 | 
						%1 = alloca i32, i32 %0, align 4		; <i32*> [#uses=1]
 | 
				
			||||||
	%2 = volatile load i32* @g0, align 4		; <i32> [#uses=1]
 | 
						%2 = load volatile i32* @g0, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	%3 = volatile load i32* @g1, align 4		; <i32> [#uses=1]
 | 
						%3 = load volatile i32* @g1, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	%4 = volatile load i32* @g2, align 4		; <i32> [#uses=1]
 | 
						%4 = load volatile i32* @g2, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	%5 = volatile load i32* @g3, align 4		; <i32> [#uses=1]
 | 
						%5 = load volatile i32* @g3, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	%6 = volatile load i32* @g4, align 4		; <i32> [#uses=1]
 | 
						%6 = load volatile i32* @g4, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	%7 = volatile load i32* @g5, align 4		; <i32> [#uses=1]
 | 
						%7 = load volatile i32* @g5, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	%8 = volatile load i32* @g6, align 4		; <i32> [#uses=1]
 | 
						%8 = load volatile i32* @g6, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	%9 = volatile load i32* @g7, align 4		; <i32> [#uses=1]
 | 
						%9 = load volatile i32* @g7, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	%10 = volatile load i32* @g8, align 4		; <i32> [#uses=1]
 | 
						%10 = load volatile i32* @g8, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	%11 = volatile load i32* @g9, align 4		; <i32> [#uses=1]
 | 
						%11 = load volatile i32* @g9, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	%12 = volatile load i32* @g10, align 4		; <i32> [#uses=1]
 | 
						%12 = load volatile i32* @g10, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	%13 = volatile load i32* @g11, align 4		; <i32> [#uses=2]
 | 
						%13 = load volatile i32* @g11, align 4		; <i32> [#uses=2]
 | 
				
			||||||
	%14 = getelementptr [100 x i32]* %x, i32 0, i32 50		; <i32*> [#uses=1]
 | 
						%14 = getelementptr [100 x i32]* %x, i32 0, i32 50		; <i32*> [#uses=1]
 | 
				
			||||||
	store i32 %13, i32* %14, align 4
 | 
						store i32 %13, i32* %14, align 4
 | 
				
			||||||
	volatile store i32 %13, i32* @g11, align 4
 | 
						store volatile i32 %13, i32* @g11, align 4
 | 
				
			||||||
	volatile store i32 %12, i32* @g10, align 4
 | 
						store volatile i32 %12, i32* @g10, align 4
 | 
				
			||||||
	volatile store i32 %11, i32* @g9, align 4
 | 
						store volatile i32 %11, i32* @g9, align 4
 | 
				
			||||||
	volatile store i32 %10, i32* @g8, align 4
 | 
						store volatile i32 %10, i32* @g8, align 4
 | 
				
			||||||
	volatile store i32 %9, i32* @g7, align 4
 | 
						store volatile i32 %9, i32* @g7, align 4
 | 
				
			||||||
	volatile store i32 %8, i32* @g6, align 4
 | 
						store volatile i32 %8, i32* @g6, align 4
 | 
				
			||||||
	volatile store i32 %7, i32* @g5, align 4
 | 
						store volatile i32 %7, i32* @g5, align 4
 | 
				
			||||||
	volatile store i32 %6, i32* @g4, align 4
 | 
						store volatile i32 %6, i32* @g4, align 4
 | 
				
			||||||
	volatile store i32 %5, i32* @g3, align 4
 | 
						store volatile i32 %5, i32* @g3, align 4
 | 
				
			||||||
	volatile store i32 %4, i32* @g2, align 4
 | 
						store volatile i32 %4, i32* @g2, align 4
 | 
				
			||||||
	volatile store i32 %3, i32* @g1, align 4
 | 
						store volatile i32 %3, i32* @g1, align 4
 | 
				
			||||||
	volatile store i32 %2, i32* @g0, align 4
 | 
						store volatile i32 %2, i32* @g0, align 4
 | 
				
			||||||
	%x1 = getelementptr [100 x i32]* %x, i32 0, i32 0		; <i32*> [#uses=1]
 | 
						%x1 = getelementptr [100 x i32]* %x, i32 0, i32 0		; <i32*> [#uses=1]
 | 
				
			||||||
	call void @g(i32* %x1, i32* %1) nounwind
 | 
						call void @g(i32* %x1, i32* %1) nounwind
 | 
				
			||||||
	ret void
 | 
						ret void
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,7 +19,7 @@ entry:
 | 
				
			|||||||
  %0 = getelementptr inbounds %struct.gpm_t* %gpm, i32 0, i32 2, i32 0 ; <i8*> [#uses=1]
 | 
					  %0 = getelementptr inbounds %struct.gpm_t* %gpm, i32 0, i32 2, i32 0 ; <i8*> [#uses=1]
 | 
				
			||||||
  %1 = getelementptr inbounds %struct.gpt_t* %gpt, i32 0, i32 9, i32 0 ; <i8*> [#uses=1]
 | 
					  %1 = getelementptr inbounds %struct.gpt_t* %gpt, i32 0, i32 9, i32 0 ; <i8*> [#uses=1]
 | 
				
			||||||
  call void @uuid_LtoB(i8* %0, i8* %1) nounwind, !dbg !0
 | 
					  call void @uuid_LtoB(i8* %0, i8* %1) nounwind, !dbg !0
 | 
				
			||||||
  %a9 = volatile load i64* %data_addr.i18, align 8 ; <i64> [#uses=1]
 | 
					  %a9 = load volatile i64* %data_addr.i18, align 8 ; <i64> [#uses=1]
 | 
				
			||||||
  %a10 = call i64 @llvm.bswap.i64(i64 %a9) nounwind ; <i64> [#uses=1]
 | 
					  %a10 = call i64 @llvm.bswap.i64(i64 %a9) nounwind ; <i64> [#uses=1]
 | 
				
			||||||
  %a11 = getelementptr inbounds %struct.gpt_t* %gpt, i32 0, i32 8, !dbg !7 ; <i64*> [#uses=1]
 | 
					  %a11 = getelementptr inbounds %struct.gpt_t* %gpt, i32 0, i32 8, !dbg !7 ; <i64*> [#uses=1]
 | 
				
			||||||
  %a12 = load i64* %a11, align 4, !dbg !7         ; <i64> [#uses=1]
 | 
					  %a12 = load i64* %a11, align 4, !dbg !7         ; <i64> [#uses=1]
 | 
				
			||||||
@@ -29,7 +29,7 @@ entry:
 | 
				
			|||||||
  call void @llvm.dbg.value(metadata !18, i64 0, metadata !19) nounwind
 | 
					  call void @llvm.dbg.value(metadata !18, i64 0, metadata !19) nounwind
 | 
				
			||||||
  call void @llvm.dbg.declare(metadata !6, metadata !23) nounwind
 | 
					  call void @llvm.dbg.declare(metadata !6, metadata !23) nounwind
 | 
				
			||||||
  call void @llvm.dbg.value(metadata !{i64* %data_addr.i17}, i64 0, metadata !34) nounwind
 | 
					  call void @llvm.dbg.value(metadata !{i64* %data_addr.i17}, i64 0, metadata !34) nounwind
 | 
				
			||||||
  %a13 = volatile load i64* %data_addr.i17, align 8 ; <i64> [#uses=1]
 | 
					  %a13 = load volatile i64* %data_addr.i17, align 8 ; <i64> [#uses=1]
 | 
				
			||||||
  %a14 = call i64 @llvm.bswap.i64(i64 %a13) nounwind ; <i64> [#uses=2]
 | 
					  %a14 = call i64 @llvm.bswap.i64(i64 %a13) nounwind ; <i64> [#uses=2]
 | 
				
			||||||
  %a15 = add i64 %a10, %a14, !dbg !7              ; <i64> [#uses=1]
 | 
					  %a15 = add i64 %a10, %a14, !dbg !7              ; <i64> [#uses=1]
 | 
				
			||||||
  %a16 = sub i64 %a15, %a14                       ; <i64> [#uses=1]
 | 
					  %a16 = sub i64 %a15, %a14                       ; <i64> [#uses=1]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,6 +30,6 @@ declare void @func(%struct2*)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
define void @tty_init() {
 | 
					define void @tty_init() {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
	volatile store void (%struct2*)* @func, void (%struct2*)** getelementptr (%struct1* @driver1, i64 0, i32 1)
 | 
						store volatile void (%struct2*)* @func, void (%struct2*)** getelementptr (%struct1* @driver1, i64 0, i32 1)
 | 
				
			||||||
	ret void
 | 
						ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@ target datalayout = "e-p:32:32"
 | 
				
			|||||||
define internal void @f1(%struct1* %tty) {
 | 
					define internal void @f1(%struct1* %tty) {
 | 
				
			||||||
loopentry.preheader:
 | 
					loopentry.preheader:
 | 
				
			||||||
	%tmp.2.i.i = getelementptr %struct1* %tty, i64 0, i32 1		; <void (%struct2*)**> [#uses=1]
 | 
						%tmp.2.i.i = getelementptr %struct1* %tty, i64 0, i32 1		; <void (%struct2*)**> [#uses=1]
 | 
				
			||||||
	%tmp.3.i.i = volatile load void (%struct2*)** %tmp.2.i.i		; <void (%struct2*)*> [#uses=0]
 | 
						%tmp.3.i.i = load volatile void (%struct2*)** %tmp.2.i.i		; <void (%struct2*)*> [#uses=0]
 | 
				
			||||||
	ret void
 | 
						ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,12 +42,12 @@ entry:
 | 
				
			|||||||
  ]
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb:                                               ; preds = %entry
 | 
					bb:                                               ; preds = %entry
 | 
				
			||||||
  volatile store i32 11, i32* @var_tls, align 4
 | 
					  store volatile i32 11, i32* @var_tls, align 4
 | 
				
			||||||
  volatile store double 2.200000e+01, double* @var_tls_double, align 8
 | 
					  store volatile double 2.200000e+01, double* @var_tls_double, align 8
 | 
				
			||||||
  volatile store i32 33, i32* @var_static, align 4
 | 
					  store volatile i32 33, i32* @var_static, align 4
 | 
				
			||||||
  volatile store double 4.400000e+01, double* @var_static_double, align 8
 | 
					  store volatile double 4.400000e+01, double* @var_static_double, align 8
 | 
				
			||||||
  volatile store i32 55, i32* @var_global, align 4
 | 
					  store volatile i32 55, i32* @var_global, align 4
 | 
				
			||||||
  volatile store double 6.600000e+01, double* @var_global_double, align 8
 | 
					  store volatile double 6.600000e+01, double* @var_global_double, align 8
 | 
				
			||||||
  br label %bb3
 | 
					  br label %bb3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb2:                                              ; preds = %entry
 | 
					bb2:                                              ; preds = %entry
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -151,7 +151,7 @@ entry:
 | 
				
			|||||||
exit:
 | 
					exit:
 | 
				
			||||||
  %t3 = phi i32* [ %t4, %exit ]
 | 
					  %t3 = phi i32* [ %t4, %exit ]
 | 
				
			||||||
  %t4 = bitcast i32* %t3 to i32*
 | 
					  %t4 = bitcast i32* %t3 to i32*
 | 
				
			||||||
  %x = volatile load i32* %t3
 | 
					  %x = load volatile i32* %t3
 | 
				
			||||||
  br label %exit
 | 
					  br label %exit
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,10 +30,10 @@ entry:
 | 
				
			|||||||
define void @h() {
 | 
					define void @h() {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
  %i = alloca i32, align 4
 | 
					  %i = alloca i32, align 4
 | 
				
			||||||
  volatile store i32 10, i32* %i, align 4
 | 
					  store volatile i32 10, i32* %i, align 4
 | 
				
			||||||
; CHECK: %tmp = load volatile i32* %i, align 4
 | 
					; CHECK: %tmp = load volatile i32* %i, align 4
 | 
				
			||||||
; CHECK-next: call void @f(i32 undef)
 | 
					; CHECK-next: call void @f(i32 undef)
 | 
				
			||||||
  %tmp = volatile load i32* %i, align 4
 | 
					  %tmp = load volatile i32* %i, align 4
 | 
				
			||||||
  call void @f(i32 %tmp)
 | 
					  call void @f(i32 %tmp)
 | 
				
			||||||
  ret void
 | 
					  ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,22 +10,22 @@ define void @test1(i8 %V, i32 *%P) {
 | 
				
			|||||||
  
 | 
					  
 | 
				
			||||||
  %C = zext i8 %V to i32
 | 
					  %C = zext i8 %V to i32
 | 
				
			||||||
  %D = zext i8 %V to i32  ;; CSE
 | 
					  %D = zext i8 %V to i32  ;; CSE
 | 
				
			||||||
  volatile store i32 %C, i32* %P
 | 
					  store volatile i32 %C, i32* %P
 | 
				
			||||||
  volatile store i32 %D, i32* %P
 | 
					  store volatile i32 %D, i32* %P
 | 
				
			||||||
  ; CHECK-NEXT: %C = zext i8 %V to i32
 | 
					  ; CHECK-NEXT: %C = zext i8 %V to i32
 | 
				
			||||||
  ; CHECK-NEXT: store volatile i32 %C
 | 
					  ; CHECK-NEXT: store volatile i32 %C
 | 
				
			||||||
  ; CHECK-NEXT: store volatile i32 %C
 | 
					  ; CHECK-NEXT: store volatile i32 %C
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  %E = add i32 %C, %C
 | 
					  %E = add i32 %C, %C
 | 
				
			||||||
  %F = add i32 %C, %C
 | 
					  %F = add i32 %C, %C
 | 
				
			||||||
  volatile store i32 %E, i32* %P
 | 
					  store volatile i32 %E, i32* %P
 | 
				
			||||||
  volatile store i32 %F, i32* %P
 | 
					  store volatile i32 %F, i32* %P
 | 
				
			||||||
  ; CHECK-NEXT: %E = add i32 %C, %C
 | 
					  ; CHECK-NEXT: %E = add i32 %C, %C
 | 
				
			||||||
  ; CHECK-NEXT: store volatile i32 %E
 | 
					  ; CHECK-NEXT: store volatile i32 %E
 | 
				
			||||||
  ; CHECK-NEXT: store volatile i32 %E
 | 
					  ; CHECK-NEXT: store volatile i32 %E
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  %G = add nuw i32 %C, %C         ;; not a CSE with E
 | 
					  %G = add nuw i32 %C, %C         ;; not a CSE with E
 | 
				
			||||||
  volatile store i32 %G, i32* %P
 | 
					  store volatile i32 %G, i32* %P
 | 
				
			||||||
  ; CHECK-NEXT: %G = add nuw i32 %C, %C
 | 
					  ; CHECK-NEXT: %G = add nuw i32 %C, %C
 | 
				
			||||||
  ; CHECK-NEXT: store volatile i32 %G
 | 
					  ; CHECK-NEXT: store volatile i32 %G
 | 
				
			||||||
  ret void
 | 
					  ret void
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,6 +4,6 @@
 | 
				
			|||||||
@g = global i32 0		; <i32*> [#uses=1]
 | 
					@g = global i32 0		; <i32*> [#uses=1]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define i32 @f() {
 | 
					define i32 @f() {
 | 
				
			||||||
	%t = volatile load i32* @g		; <i32> [#uses=1]
 | 
						%t = load volatile i32* @g		; <i32> [#uses=1]
 | 
				
			||||||
	ret i32 %t
 | 
						ret i32 %t
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,6 +5,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
define void @foo() {
 | 
					define void @foo() {
 | 
				
			||||||
; CHECK: void @foo() {
 | 
					; CHECK: void @foo() {
 | 
				
			||||||
  %tmp = volatile load i32* @g
 | 
					  %tmp = load volatile i32* @g
 | 
				
			||||||
  ret void
 | 
					  ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
define double @foo() nounwind  {
 | 
					define double @foo() nounwind  {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
	%tmp1 = volatile load double* @t0.1441, align 8		; <double> [#uses=2]
 | 
						%tmp1 = load volatile double* @t0.1441, align 8		; <double> [#uses=2]
 | 
				
			||||||
	%tmp4 = fmul double %tmp1, %tmp1		; <double> [#uses=1]
 | 
						%tmp4 = fmul double %tmp1, %tmp1		; <double> [#uses=1]
 | 
				
			||||||
	ret double %tmp4
 | 
						ret double %tmp4
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@
 | 
				
			|||||||
define void @foo(i32 %x) nounwind readnone {
 | 
					define void @foo(i32 %x) nounwind readnone {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
  %b = alloca i32, align 4                        ; <i32*> [#uses=1]
 | 
					  %b = alloca i32, align 4                        ; <i32*> [#uses=1]
 | 
				
			||||||
  volatile store i32 -1, i32* %b
 | 
					  store volatile i32 -1, i32* %b
 | 
				
			||||||
  ret void
 | 
					  ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -90,7 +90,7 @@ entry:
 | 
				
			|||||||
	br label %bb4
 | 
						br label %bb4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb:		; preds = %bb4
 | 
					bb:		; preds = %bb4
 | 
				
			||||||
	%0 = volatile load i32* @x, align 4		; <i32> [#uses=1]
 | 
						%0 = load volatile i32* @x, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	store i32 %0, i32* %vol.0, align 4
 | 
						store i32 %0, i32* %vol.0, align 4
 | 
				
			||||||
	store i32 0, i32* %l_52, align 4
 | 
						store i32 0, i32* %l_52, align 4
 | 
				
			||||||
	br label %bb2
 | 
						br label %bb2
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,7 @@ loop:
 | 
				
			|||||||
  %i = phi i64 [ 0, %entry ], [ %i.next, %loop ]
 | 
					  %i = phi i64 [ 0, %entry ], [ %i.next, %loop ]
 | 
				
			||||||
  %ip = add i64 %i, 1
 | 
					  %ip = add i64 %i, 1
 | 
				
			||||||
  %p.2.ip.1 = getelementptr [3 x [3 x double]]* %p, i64 2, i64 %ip, i64 1
 | 
					  %p.2.ip.1 = getelementptr [3 x [3 x double]]* %p, i64 2, i64 %ip, i64 1
 | 
				
			||||||
  volatile store double 0.0, double* %p.2.ip.1
 | 
					  store volatile double 0.0, double* %p.2.ip.1
 | 
				
			||||||
  %i.next = add i64 %i, 1
 | 
					  %i.next = add i64 %i, 1
 | 
				
			||||||
  br label %loop
 | 
					  br label %loop
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,8 +18,8 @@ while.cond:                                       ; preds = %while.cond, %entry
 | 
				
			|||||||
  br i1 %tobool, label %while.end, label %while.cond
 | 
					  br i1 %tobool, label %while.end, label %while.cond
 | 
				
			||||||
 | 
					
 | 
				
			||||||
while.end:                                        ; preds = %while.cond
 | 
					while.end:                                        ; preds = %while.cond
 | 
				
			||||||
  volatile store i32 0, i32* %result.i
 | 
					  store volatile i32 0, i32* %result.i
 | 
				
			||||||
  %tmp.i = volatile load i32* %result.i           ; <i32> [#uses=0]
 | 
					  %tmp.i = load volatile i32* %result.i           ; <i32> [#uses=0]
 | 
				
			||||||
  ret i32 0
 | 
					  ret i32 0
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
declare i32 @bar()
 | 
					declare i32 @bar()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,7 @@ entry:
 | 
				
			|||||||
bb:                                               ; preds = %entry
 | 
					bb:                                               ; preds = %entry
 | 
				
			||||||
  %1 = sub nsw i32 %x, 1                          ; <i32> [#uses=1]
 | 
					  %1 = sub nsw i32 %x, 1                          ; <i32> [#uses=1]
 | 
				
			||||||
  call void @foo(i32 %1) nounwind ssp
 | 
					  call void @foo(i32 %1) nounwind ssp
 | 
				
			||||||
  volatile store i32 1, i32* @g, align 4
 | 
					  store volatile i32 1, i32* @g, align 4
 | 
				
			||||||
  ret void
 | 
					  ret void
 | 
				
			||||||
 | 
					
 | 
				
			||||||
return:                                           ; preds = %entry
 | 
					return:                                           ; preds = %entry
 | 
				
			||||||
@@ -42,7 +42,7 @@ entry:
 | 
				
			|||||||
  %0 = bitcast i8* %Bar to void (i32, i8*, i8*)*
 | 
					  %0 = bitcast i8* %Bar to void (i32, i8*, i8*)*
 | 
				
			||||||
  %1 = sub nsw i32 %x, 1
 | 
					  %1 = sub nsw i32 %x, 1
 | 
				
			||||||
  call void %0(i32 %1, i8* %Foo, i8* %Bar) nounwind
 | 
					  call void %0(i32 %1, i8* %Foo, i8* %Bar) nounwind
 | 
				
			||||||
  volatile store i32 42, i32* @g, align 4
 | 
					  store volatile i32 42, i32* @g, align 4
 | 
				
			||||||
  ret void
 | 
					  ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -54,7 +54,7 @@ entry:
 | 
				
			|||||||
bb:                                               ; preds = %entry
 | 
					bb:                                               ; preds = %entry
 | 
				
			||||||
  %1 = bitcast i8* %Foo to void (i32, i8*, i8*)*  ; <void (i32, i8*, i8*)*> [#uses=1]
 | 
					  %1 = bitcast i8* %Foo to void (i32, i8*, i8*)*  ; <void (i32, i8*, i8*)*> [#uses=1]
 | 
				
			||||||
  call void %1(i32 %x, i8* %Foo, i8* %Bar) nounwind
 | 
					  call void %1(i32 %x, i8* %Foo, i8* %Bar) nounwind
 | 
				
			||||||
  volatile store i32 13, i32* @g, align 4
 | 
					  store volatile i32 13, i32* @g, align 4
 | 
				
			||||||
  ret void
 | 
					  ret void
 | 
				
			||||||
 | 
					
 | 
				
			||||||
return:                                           ; preds = %entry
 | 
					return:                                           ; preds = %entry
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,6 +2,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
define void @test(i32* %P) {
 | 
					define void @test(i32* %P) {
 | 
				
			||||||
        ; Dead but not deletable!
 | 
					        ; Dead but not deletable!
 | 
				
			||||||
        %X = volatile load i32* %P              ; <i32> [#uses=0]
 | 
					        %X = load volatile i32* %P              ; <i32> [#uses=0]
 | 
				
			||||||
        ret void
 | 
					        ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,7 +26,7 @@ lab:		; preds = %cleanup31, %entry
 | 
				
			|||||||
	%tmp21 = getelementptr i32* %tmp1819, i32 0		; <i32*> [#uses=1]
 | 
						%tmp21 = getelementptr i32* %tmp1819, i32 0		; <i32*> [#uses=1]
 | 
				
			||||||
	store i32 1, i32* %tmp21, align 4
 | 
						store i32 1, i32* %tmp21, align 4
 | 
				
			||||||
	%tmp2223 = bitcast i32* %tmp1819 to i8*		; <i8*> [#uses=1]
 | 
						%tmp2223 = bitcast i32* %tmp1819 to i8*		; <i8*> [#uses=1]
 | 
				
			||||||
	volatile store i8* %tmp2223, i8** @p, align 4
 | 
						store volatile i8* %tmp2223, i8** @p, align 4
 | 
				
			||||||
	%tmp25 = add i32 %n.0, 1		; <i32> [#uses=2]
 | 
						%tmp25 = add i32 %n.0, 1		; <i32> [#uses=2]
 | 
				
			||||||
	%tmp27 = icmp sle i32 %tmp25, 999999		; <i1> [#uses=1]
 | 
						%tmp27 = icmp sle i32 %tmp25, 999999		; <i1> [#uses=1]
 | 
				
			||||||
	%tmp2728 = zext i1 %tmp27 to i8		; <i8> [#uses=1]
 | 
						%tmp2728 = zext i1 %tmp27 to i8		; <i8> [#uses=1]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
define void @test() {
 | 
					define void @test() {
 | 
				
			||||||
	%votf = alloca <4 x float>		; <<4 x float>*> [#uses=1]
 | 
						%votf = alloca <4 x float>		; <<4 x float>*> [#uses=1]
 | 
				
			||||||
	volatile store <4 x float> zeroinitializer, <4 x float>* %votf, align 16
 | 
						store volatile <4 x float> zeroinitializer, <4 x float>* %votf, align 16
 | 
				
			||||||
	ret void
 | 
						ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,17 +6,17 @@ target triple = "i386-apple-darwin8"
 | 
				
			|||||||
define i32 @main() nounwind  {
 | 
					define i32 @main() nounwind  {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
	%tmp93 = icmp slt i32 0, 10		; <i1> [#uses=0]
 | 
						%tmp93 = icmp slt i32 0, 10		; <i1> [#uses=0]
 | 
				
			||||||
	%tmp34 = volatile load i32* @g_1, align 4		; <i32> [#uses=1]
 | 
						%tmp34 = load volatile i32* @g_1, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	br label %bb
 | 
						br label %bb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb:		; preds = %bb, %entry
 | 
					bb:		; preds = %bb, %entry
 | 
				
			||||||
	%b.0.reg2mem.0 = phi i32 [ 0, %entry ], [ %tmp6, %bb ]		; <i32> [#uses=1]
 | 
						%b.0.reg2mem.0 = phi i32 [ 0, %entry ], [ %tmp6, %bb ]		; <i32> [#uses=1]
 | 
				
			||||||
	%tmp3.reg2mem.0 = phi i32 [ %tmp34, %entry ], [ %tmp3, %bb ]		; <i32> [#uses=1]
 | 
						%tmp3.reg2mem.0 = phi i32 [ %tmp34, %entry ], [ %tmp3, %bb ]		; <i32> [#uses=1]
 | 
				
			||||||
	%tmp4 = add i32 %tmp3.reg2mem.0, 5		; <i32> [#uses=1]
 | 
						%tmp4 = add i32 %tmp3.reg2mem.0, 5		; <i32> [#uses=1]
 | 
				
			||||||
	volatile store i32 %tmp4, i32* @g_1, align 4
 | 
						store volatile i32 %tmp4, i32* @g_1, align 4
 | 
				
			||||||
	%tmp6 = add i32 %b.0.reg2mem.0, 1		; <i32> [#uses=2]
 | 
						%tmp6 = add i32 %b.0.reg2mem.0, 1		; <i32> [#uses=2]
 | 
				
			||||||
	%tmp9 = icmp slt i32 %tmp6, 10		; <i1> [#uses=1]
 | 
						%tmp9 = icmp slt i32 %tmp6, 10		; <i1> [#uses=1]
 | 
				
			||||||
	%tmp3 = volatile load i32* @g_1, align 4		; <i32> [#uses=1]
 | 
						%tmp3 = load volatile i32* @g_1, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	br i1 %tmp9, label %bb, label %bb11
 | 
						br i1 %tmp9, label %bb, label %bb11
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb11:		; preds = %bb
 | 
					bb11:		; preds = %bb
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,11 +7,11 @@ target triple = "i386-apple-darwin8"
 | 
				
			|||||||
define i32 @main(i32 %i) nounwind  {
 | 
					define i32 @main(i32 %i) nounwind  {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
	%tmp93 = icmp slt i32 %i, 10		; <i1> [#uses=0]
 | 
						%tmp93 = icmp slt i32 %i, 10		; <i1> [#uses=0]
 | 
				
			||||||
	%tmp34 = volatile load i32* @g_1, align 4		; <i32> [#uses=1]
 | 
						%tmp34 = load volatile i32* @g_1, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	br i1 %tmp93, label %bb11, label %bb
 | 
						br i1 %tmp93, label %bb11, label %bb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb:		; preds = %bb, %entry
 | 
					bb:		; preds = %bb, %entry
 | 
				
			||||||
	%tmp3 = volatile load i32* @g_1, align 4		; <i32> [#uses=1]
 | 
						%tmp3 = load volatile i32* @g_1, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	br label %bb11
 | 
						br label %bb11
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb11:		; preds = %bb
 | 
					bb11:		; preds = %bb
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ entry:
 | 
				
			|||||||
	%tmp2752 = alloca i32		; <i32*> [#uses=2]
 | 
						%tmp2752 = alloca i32		; <i32*> [#uses=2]
 | 
				
			||||||
	%tmpcast53 = bitcast i32* %tmp2752 to i8*		; <i8*> [#uses=1]
 | 
						%tmpcast53 = bitcast i32* %tmp2752 to i8*		; <i8*> [#uses=1]
 | 
				
			||||||
	store i32 2, i32* %tmp2752, align 4
 | 
						store i32 2, i32* %tmp2752, align 4
 | 
				
			||||||
	volatile store i8* %tmpcast53, i8** @p, align 4
 | 
						store volatile i8* %tmpcast53, i8** @p, align 4
 | 
				
			||||||
	br label %bb44
 | 
						br label %bb44
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb:		; preds = %bb44
 | 
					bb:		; preds = %bb44
 | 
				
			||||||
@@ -29,7 +29,7 @@ bb44:		; preds = %bb44, %entry
 | 
				
			|||||||
	store i32 1, i32* %tmp27, align 4
 | 
						store i32 1, i32* %tmp27, align 4
 | 
				
			||||||
	%tmp34 = getelementptr i32* %tmp27, i32 %tmp4		; <i32*> [#uses=1]
 | 
						%tmp34 = getelementptr i32* %tmp27, i32 %tmp4		; <i32*> [#uses=1]
 | 
				
			||||||
	store i32 2, i32* %tmp34, align 4
 | 
						store i32 2, i32* %tmp34, align 4
 | 
				
			||||||
	volatile store i8* %tmpcast, i8** @p, align 4
 | 
						store volatile i8* %tmpcast, i8** @p, align 4
 | 
				
			||||||
	%exitcond = icmp eq i32 %tmp3857, 999999		; <i1> [#uses=1]
 | 
						%exitcond = icmp eq i32 %tmp3857, 999999		; <i1> [#uses=1]
 | 
				
			||||||
	br i1 %exitcond, label %bb, label %bb44
 | 
						br i1 %exitcond, label %bb, label %bb44
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,17 +7,17 @@ target triple = "i386-apple-darwin8"
 | 
				
			|||||||
define i32 @main() nounwind  {
 | 
					define i32 @main() nounwind  {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
	%tmp93 = icmp slt i32 0, 10		; <i1> [#uses=0]
 | 
						%tmp93 = icmp slt i32 0, 10		; <i1> [#uses=0]
 | 
				
			||||||
	%tmp34 = volatile load i32* @g_1, align 4		; <i32> [#uses=1]
 | 
						%tmp34 = load volatile i32* @g_1, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	br label %bb
 | 
						br label %bb
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb:		; preds = %bb, %entry
 | 
					bb:		; preds = %bb, %entry
 | 
				
			||||||
	%b.0.reg2mem.0 = phi i32 [ 0, %entry ], [ %tmp6, %bb ]		; <i32> [#uses=1]
 | 
						%b.0.reg2mem.0 = phi i32 [ 0, %entry ], [ %tmp6, %bb ]		; <i32> [#uses=1]
 | 
				
			||||||
	%tmp3.reg2mem.0 = phi i32 [ %tmp3, %bb ], [ %tmp34, %entry ]
 | 
						%tmp3.reg2mem.0 = phi i32 [ %tmp3, %bb ], [ %tmp34, %entry ]
 | 
				
			||||||
	%tmp4 = add i32 %tmp3.reg2mem.0, 5		; <i32> [#uses=1]
 | 
						%tmp4 = add i32 %tmp3.reg2mem.0, 5		; <i32> [#uses=1]
 | 
				
			||||||
	volatile store i32 %tmp4, i32* @g_1, align 4
 | 
						store volatile i32 %tmp4, i32* @g_1, align 4
 | 
				
			||||||
	%tmp6 = add i32 %b.0.reg2mem.0, 1		; <i32> [#uses=2]
 | 
						%tmp6 = add i32 %b.0.reg2mem.0, 1		; <i32> [#uses=2]
 | 
				
			||||||
	%tmp9 = icmp slt i32 %tmp6, 10		; <i1> [#uses=1]
 | 
						%tmp9 = icmp slt i32 %tmp6, 10		; <i1> [#uses=1]
 | 
				
			||||||
	%tmp3 = volatile load i32* @g_1, align 4		; <i32> [#uses=1]
 | 
						%tmp3 = load volatile i32* @g_1, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	br i1 %tmp9, label %bb, label %bb11
 | 
						br i1 %tmp9, label %bb, label %bb11
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb11:		; preds = %bb
 | 
					bb11:		; preds = %bb
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -88,7 +88,7 @@ define i32 @doubleextract2gep({i32, {i32, i32}}* %arg) {
 | 
				
			|||||||
; CHECK-NEXT: ret
 | 
					; CHECK-NEXT: ret
 | 
				
			||||||
define i32 @nogep-multiuse({i32, i32}* %pair) {
 | 
					define i32 @nogep-multiuse({i32, i32}* %pair) {
 | 
				
			||||||
        ; The load should be left unchanged since both parts are needed.
 | 
					        ; The load should be left unchanged since both parts are needed.
 | 
				
			||||||
        %L = volatile load {i32, i32}* %pair
 | 
					        %L = load volatile {i32, i32}* %pair
 | 
				
			||||||
        %LHS = extractvalue {i32, i32} %L, 0
 | 
					        %LHS = extractvalue {i32, i32} %L, 0
 | 
				
			||||||
        %RHS = extractvalue {i32, i32} %L, 1
 | 
					        %RHS = extractvalue {i32, i32} %L, 1
 | 
				
			||||||
        %R = add i32 %LHS, %RHS
 | 
					        %R = add i32 %LHS, %RHS
 | 
				
			||||||
@@ -100,8 +100,8 @@ define i32 @nogep-multiuse({i32, i32}* %pair) {
 | 
				
			|||||||
; CHECK-NEXT: extractvalue
 | 
					; CHECK-NEXT: extractvalue
 | 
				
			||||||
; CHECK-NEXT: ret
 | 
					; CHECK-NEXT: ret
 | 
				
			||||||
define i32 @nogep-volatile({i32, i32}* %pair) {
 | 
					define i32 @nogep-volatile({i32, i32}* %pair) {
 | 
				
			||||||
        ; The volatile load should be left unchanged.
 | 
					        ; The load volatile should be left unchanged.
 | 
				
			||||||
        %L = volatile load {i32, i32}* %pair
 | 
					        %L = load volatile {i32, i32}* %pair
 | 
				
			||||||
        %E = extractvalue {i32, i32} %L, 1
 | 
					        %E = extractvalue {i32, i32} %L, 1
 | 
				
			||||||
        ret i32 %E
 | 
					        ret i32 %E
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -142,13 +142,13 @@ define i32 @umultest4(i32 %n) nounwind {
 | 
				
			|||||||
define void @powi(double %V, double *%P) {
 | 
					define void @powi(double %V, double *%P) {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
  %A = tail call double @llvm.powi.f64(double %V, i32 -1) nounwind
 | 
					  %A = tail call double @llvm.powi.f64(double %V, i32 -1) nounwind
 | 
				
			||||||
  volatile store double %A, double* %P
 | 
					  store volatile double %A, double* %P
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  %B = tail call double @llvm.powi.f64(double %V, i32 0) nounwind
 | 
					  %B = tail call double @llvm.powi.f64(double %V, i32 0) nounwind
 | 
				
			||||||
  volatile store double %B, double* %P
 | 
					  store volatile double %B, double* %P
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  %C = tail call double @llvm.powi.f64(double %V, i32 1) nounwind
 | 
					  %C = tail call double @llvm.powi.f64(double %V, i32 1) nounwind
 | 
				
			||||||
  volatile store double %C, double* %P
 | 
					  store volatile double %C, double* %P
 | 
				
			||||||
  ret void
 | 
					  ret void
 | 
				
			||||||
; CHECK: @powi
 | 
					; CHECK: @powi
 | 
				
			||||||
; CHECK: %A = fdiv double 1.0{{.*}}, %V
 | 
					; CHECK: %A = fdiv double 1.0{{.*}}, %V
 | 
				
			||||||
@@ -183,13 +183,13 @@ define void @cmp.simplify(i32 %a, i32 %b, i1* %c) {
 | 
				
			|||||||
entry:
 | 
					entry:
 | 
				
			||||||
  %lz = tail call i32 @llvm.ctlz.i32(i32 %a) nounwind readnone
 | 
					  %lz = tail call i32 @llvm.ctlz.i32(i32 %a) nounwind readnone
 | 
				
			||||||
  %lz.cmp = icmp eq i32 %lz, 32
 | 
					  %lz.cmp = icmp eq i32 %lz, 32
 | 
				
			||||||
  volatile store i1 %lz.cmp, i1* %c
 | 
					  store volatile i1 %lz.cmp, i1* %c
 | 
				
			||||||
  %tz = tail call i32 @llvm.cttz.i32(i32 %a) nounwind readnone
 | 
					  %tz = tail call i32 @llvm.cttz.i32(i32 %a) nounwind readnone
 | 
				
			||||||
  %tz.cmp = icmp ne i32 %tz, 32
 | 
					  %tz.cmp = icmp ne i32 %tz, 32
 | 
				
			||||||
  volatile store i1 %tz.cmp, i1* %c
 | 
					  store volatile i1 %tz.cmp, i1* %c
 | 
				
			||||||
  %pop = tail call i32 @llvm.ctpop.i32(i32 %b) nounwind readnone
 | 
					  %pop = tail call i32 @llvm.ctpop.i32(i32 %b) nounwind readnone
 | 
				
			||||||
  %pop.cmp = icmp eq i32 %pop, 0
 | 
					  %pop.cmp = icmp eq i32 %pop, 0
 | 
				
			||||||
  volatile store i1 %pop.cmp, i1* %c
 | 
					  store volatile i1 %pop.cmp, i1* %c
 | 
				
			||||||
  ret void
 | 
					  ret void
 | 
				
			||||||
; CHECK: @cmp.simplify
 | 
					; CHECK: @cmp.simplify
 | 
				
			||||||
; CHECK-NEXT: entry:
 | 
					; CHECK-NEXT: entry:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,8 +5,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
define void @self_assign_1() {
 | 
					define void @self_assign_1() {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
	%tmp = volatile load i32* @x		; <i32> [#uses=1]
 | 
						%tmp = load volatile i32* @x		; <i32> [#uses=1]
 | 
				
			||||||
	volatile store i32 %tmp, i32* @x
 | 
						store volatile i32 %tmp, i32* @x
 | 
				
			||||||
	br label %return
 | 
						br label %return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
return:		; preds = %entry
 | 
					return:		; preds = %entry
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ for.cond1177:
 | 
				
			|||||||
  br i1 %cmp1179, label %for.cond1177, label %land.rhs1320
 | 
					  br i1 %cmp1179, label %for.cond1177, label %land.rhs1320
 | 
				
			||||||
 | 
					
 | 
				
			||||||
land.rhs1320:
 | 
					land.rhs1320:
 | 
				
			||||||
  %tmp1324 = volatile load i64* getelementptr inbounds (%0* @g_338, i64 0, i32 2), align 1, !tbaa !0
 | 
					  %tmp1324 = load volatile i64* getelementptr inbounds (%0* @g_338, i64 0, i32 2), align 1, !tbaa !0
 | 
				
			||||||
  br label %if.end.i
 | 
					  br label %if.end.i
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if.end.i:
 | 
					if.end.i:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -399,7 +399,7 @@ if.then237:
 | 
				
			|||||||
  br label %lbl_664
 | 
					  br label %lbl_664
 | 
				
			||||||
 | 
					
 | 
				
			||||||
lbl_596:                                          ; preds = %lbl_664, %for.end37
 | 
					lbl_596:                                          ; preds = %lbl_664, %for.end37
 | 
				
			||||||
  volatile store i64 undef, i64* undef, align 4
 | 
					  store volatile i64 undef, i64* undef, align 4
 | 
				
			||||||
  br label %for.cond111
 | 
					  br label %for.cond111
 | 
				
			||||||
 | 
					
 | 
				
			||||||
for.cond111:                                      ; preds = %safe_sub_func_int64_t_s_s.exit, %lbl_596
 | 
					for.cond111:                                      ; preds = %safe_sub_func_int64_t_s_s.exit, %lbl_596
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,11 +17,11 @@ bb:		; preds = %bb4
 | 
				
			|||||||
	br i1 %0, label %bb1, label %bb2
 | 
						br i1 %0, label %bb1, label %bb2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb1:		; preds = %bb
 | 
					bb1:		; preds = %bb
 | 
				
			||||||
	volatile store i32 1000, i32* @v1, align 4
 | 
						store volatile i32 1000, i32* @v1, align 4
 | 
				
			||||||
	br label %bb3
 | 
						br label %bb3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb2:		; preds = %bb
 | 
					bb2:		; preds = %bb
 | 
				
			||||||
	volatile store i32 1001, i32* @v1, align 4
 | 
						store volatile i32 1001, i32* @v1, align 4
 | 
				
			||||||
	br label %bb3
 | 
						br label %bb3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb3:		; preds = %bb2, %bb1
 | 
					bb3:		; preds = %bb2, %bb1
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ entry:
 | 
				
			|||||||
	br label %bb6
 | 
						br label %bb6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb:		; preds = %bb6
 | 
					bb:		; preds = %bb6
 | 
				
			||||||
	%tmp2 = volatile load i32* %DataIn		; <i32> [#uses=1]
 | 
						%tmp2 = load volatile i32* %DataIn		; <i32> [#uses=1]
 | 
				
			||||||
	%tmp3 = getelementptr [64 x i32]* %buffer, i32 0, i32 %i.0		; <i32*> [#uses=1]
 | 
						%tmp3 = getelementptr [64 x i32]* %buffer, i32 0, i32 %i.0		; <i32*> [#uses=1]
 | 
				
			||||||
	store i32 %tmp2, i32* %tmp3
 | 
						store i32 %tmp2, i32* %tmp3
 | 
				
			||||||
	%tmp5 = add i32 %i.0, 1		; <i32> [#uses=1]
 | 
						%tmp5 = add i32 %i.0, 1		; <i32> [#uses=1]
 | 
				
			||||||
@@ -28,7 +28,7 @@ bb12:		; preds = %bb22
 | 
				
			|||||||
	%tmp16 = add i32 %tmp14, %i.1		; <i32> [#uses=1]
 | 
						%tmp16 = add i32 %tmp14, %i.1		; <i32> [#uses=1]
 | 
				
			||||||
	%tmp17 = getelementptr [64 x i32]* %buffer, i32 0, i32 %tmp16		; <i32*> [#uses=1]
 | 
						%tmp17 = getelementptr [64 x i32]* %buffer, i32 0, i32 %tmp16		; <i32*> [#uses=1]
 | 
				
			||||||
	%tmp18 = load i32* %tmp17		; <i32> [#uses=1]
 | 
						%tmp18 = load i32* %tmp17		; <i32> [#uses=1]
 | 
				
			||||||
	volatile store i32 %tmp18, i32* %DataOut
 | 
						store volatile i32 %tmp18, i32* %DataOut
 | 
				
			||||||
	%tmp21 = add i32 %j.1, 1		; <i32> [#uses=1]
 | 
						%tmp21 = add i32 %j.1, 1		; <i32> [#uses=1]
 | 
				
			||||||
	br label %bb22
 | 
						br label %bb22
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,7 +19,7 @@ for.body4.lr.ph:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
for.body4:
 | 
					for.body4:
 | 
				
			||||||
  %l_612.11 = phi i32* [ undef, %for.body4.lr.ph ], [ %call19, %for.body4 ]
 | 
					  %l_612.11 = phi i32* [ undef, %for.body4.lr.ph ], [ %call19, %for.body4 ]
 | 
				
			||||||
  %tmp7 = volatile load i16* @g_39, align 2
 | 
					  %tmp7 = load volatile i16* @g_39, align 2
 | 
				
			||||||
  %call = call i32** @func_108(i32*** undef)
 | 
					  %call = call i32** @func_108(i32*** undef)
 | 
				
			||||||
  %call19 = call i32* @func_84(i32** %call)
 | 
					  %call19 = call i32* @func_84(i32** %call)
 | 
				
			||||||
  br i1 false, label %for.body4, label %for.cond.loopexit
 | 
					  br i1 false, label %for.body4, label %for.cond.loopexit
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -68,7 +68,7 @@ define void @test4() noreturn nounwind {
 | 
				
			|||||||
  br label %1
 | 
					  br label %1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
; <label>:1                                       ; preds = %1, %0
 | 
					; <label>:1                                       ; preds = %1, %0
 | 
				
			||||||
  volatile store i32* @g_47, i32** undef, align 8
 | 
					  store volatile i32* @g_47, i32** undef, align 8
 | 
				
			||||||
  store i32 undef, i32* @g_47, align 4
 | 
					  store i32 undef, i32* @g_47, align 4
 | 
				
			||||||
  br label %1
 | 
					  br label %1
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -59,7 +59,7 @@ define void @test3(i32 %i) {
 | 
				
			|||||||
	br label %Loop
 | 
						br label %Loop
 | 
				
			||||||
Loop:
 | 
					Loop:
 | 
				
			||||||
        ; Should not promote this to a register
 | 
					        ; Should not promote this to a register
 | 
				
			||||||
	%x = volatile load i32* @X
 | 
						%x = load volatile i32* @X
 | 
				
			||||||
	%x2 = add i32 %x, 1	
 | 
						%x2 = add i32 %x, 1	
 | 
				
			||||||
	store i32 %x2, i32* @X
 | 
						store i32 %x2, i32* @X
 | 
				
			||||||
	br i1 true, label %Out, label %Loop
 | 
						br i1 true, label %Out, label %Loop
 | 
				
			||||||
@@ -133,7 +133,7 @@ Loop:		; preds = %Loop, %0
 | 
				
			|||||||
	%x2 = add i32 %x, 1		; <i32> [#uses=1]
 | 
						%x2 = add i32 %x, 1		; <i32> [#uses=1]
 | 
				
			||||||
	store i32 %x2, i32* @X
 | 
						store i32 %x2, i32* @X
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        volatile store i32* @X, i32** %P2
 | 
					        store volatile i32* @X, i32** %P2
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
	%Next = add i32 %j, 1		; <i32> [#uses=2]
 | 
						%Next = add i32 %j, 1		; <i32> [#uses=2]
 | 
				
			||||||
	%cond = icmp eq i32 %Next, 0		; <i1> [#uses=1]
 | 
						%cond = icmp eq i32 %Next, 0		; <i1> [#uses=1]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ entry:
 | 
				
			|||||||
bb:		; preds = %bb, %entry
 | 
					bb:		; preds = %bb, %entry
 | 
				
			||||||
	%l_2.0.reg2mem.0 = phi i16 [ 0, %entry ], [ %t1, %bb ]		; <i16> [#uses=2]
 | 
						%l_2.0.reg2mem.0 = phi i16 [ 0, %entry ], [ %t1, %bb ]		; <i16> [#uses=2]
 | 
				
			||||||
	%t0 = shl i16 %l_2.0.reg2mem.0, 1		; <i16>:0 [#uses=1]
 | 
						%t0 = shl i16 %l_2.0.reg2mem.0, 1		; <i16>:0 [#uses=1]
 | 
				
			||||||
	volatile store i16 %t0, i16* @g_3, align 2
 | 
						store volatile i16 %t0, i16* @g_3, align 2
 | 
				
			||||||
	%t1 = add i16 %l_2.0.reg2mem.0, -3		; <i16>:1 [#uses=2]
 | 
						%t1 = add i16 %l_2.0.reg2mem.0, -3		; <i16>:1 [#uses=2]
 | 
				
			||||||
	%t2 = icmp slt i16 %t1, 1		; <i1>:2 [#uses=1]
 | 
						%t2 = icmp slt i16 %t1, 1		; <i1>:2 [#uses=1]
 | 
				
			||||||
	br i1 %t2, label %bb, label %return
 | 
						br i1 %t2, label %bb, label %return
 | 
				
			||||||
@@ -22,7 +22,7 @@ return:		; preds = %bb
 | 
				
			|||||||
define i32 @main() nounwind {
 | 
					define i32 @main() nounwind {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
	tail call void @func_1( ) nounwind
 | 
						tail call void @func_1( ) nounwind
 | 
				
			||||||
	volatile load i16* @g_3, align 2		; <i16>:0 [#uses=1]
 | 
						load volatile i16* @g_3, align 2		; <i16>:0 [#uses=1]
 | 
				
			||||||
	zext i16 %0 to i32		; <i32>:1 [#uses=1]
 | 
						zext i16 %0 to i32		; <i32>:1 [#uses=1]
 | 
				
			||||||
	tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8]* @"\01LC", i32 0, i32 0), i32 %1 ) nounwind		; <i32>:2 [#uses=0]
 | 
						tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8]* @"\01LC", i32 0, i32 0), i32 %1 ) nounwind		; <i32>:2 [#uses=0]
 | 
				
			||||||
	ret i32 0
 | 
						ret i32 0
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@ entry:
 | 
				
			|||||||
	br label %no_exit
 | 
						br label %no_exit
 | 
				
			||||||
no_exit:		; preds = %no_exit, %entry
 | 
					no_exit:		; preds = %no_exit, %entry
 | 
				
			||||||
	%indvar = phi i32 [ 0, %entry ], [ %indvar.next, %no_exit ]		; <i32> [#uses=1]
 | 
						%indvar = phi i32 [ 0, %entry ], [ %indvar.next, %no_exit ]		; <i32> [#uses=1]
 | 
				
			||||||
	volatile store float 0.000000e+00, float* %D
 | 
						store volatile float 0.000000e+00, float* %D
 | 
				
			||||||
	%indvar.next = add i32 %indvar, 1		; <i32> [#uses=2]
 | 
						%indvar.next = add i32 %indvar, 1		; <i32> [#uses=2]
 | 
				
			||||||
; CHECK: icmp
 | 
					; CHECK: icmp
 | 
				
			||||||
; CHECK-NEXT: br i1
 | 
					; CHECK-NEXT: br i1
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@ bb:		; preds = %bb5, %bb5.thread
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bb1:		; preds = %bb
 | 
					bb1:		; preds = %bb
 | 
				
			||||||
	%l_2.0.reg2mem.0 = sub i32 0, %indvar		; <i32> [#uses=1]
 | 
						%l_2.0.reg2mem.0 = sub i32 0, %indvar		; <i32> [#uses=1]
 | 
				
			||||||
	%0 = volatile load i32* @g_53, align 4		; <i32> [#uses=1]
 | 
						%0 = load volatile i32* @g_53, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	%1 = trunc i32 %l_2.0.reg2mem.0 to i16		; <i16> [#uses=1]
 | 
						%1 = trunc i32 %l_2.0.reg2mem.0 to i16		; <i16> [#uses=1]
 | 
				
			||||||
	%2 = trunc i32 %0 to i16		; <i16> [#uses=1]
 | 
						%2 = trunc i32 %0 to i16		; <i16> [#uses=1]
 | 
				
			||||||
	%3 = mul i16 %2, %1		; <i16> [#uses=1]
 | 
						%3 = mul i16 %2, %1		; <i16> [#uses=1]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
; RUN: opt < %s -std-compile-opts -S | grep volatile | count 3
 | 
					; RUN: opt < %s -std-compile-opts -S | grep volatile | count 3
 | 
				
			||||||
; PR1520
 | 
					; PR1520
 | 
				
			||||||
; Don't promote volatile loads/stores. This is really needed to handle setjmp/lonjmp properly.
 | 
					; Don't promote load volatiles/stores. This is really needed to handle setjmp/lonjmp properly.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32"
 | 
					target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32"
 | 
				
			||||||
target triple = "i686-pc-linux-gnu"
 | 
					target triple = "i686-pc-linux-gnu"
 | 
				
			||||||
@@ -14,7 +14,7 @@ entry:
 | 
				
			|||||||
	%v = alloca i32, align 4		; <i32*> [#uses=3]
 | 
						%v = alloca i32, align 4		; <i32*> [#uses=3]
 | 
				
			||||||
	%tmp = alloca i32, align 4		; <i32*> [#uses=3]
 | 
						%tmp = alloca i32, align 4		; <i32*> [#uses=3]
 | 
				
			||||||
	%"alloca point" = bitcast i32 0 to i32		; <i32> [#uses=0]
 | 
						%"alloca point" = bitcast i32 0 to i32		; <i32> [#uses=0]
 | 
				
			||||||
	volatile store i32 0, i32* %v, align 4
 | 
						store volatile i32 0, i32* %v, align 4
 | 
				
			||||||
	%tmp1 = call i32 @_setjmp( %struct.__jmp_buf_tag* getelementptr ([1 x %struct.__jmp_buf_tag]* @j, i32 0, i32 0) )		; <i32> [#uses=1]
 | 
						%tmp1 = call i32 @_setjmp( %struct.__jmp_buf_tag* getelementptr ([1 x %struct.__jmp_buf_tag]* @j, i32 0, i32 0) )		; <i32> [#uses=1]
 | 
				
			||||||
	%tmp2 = icmp ne i32 %tmp1, 0		; <i1> [#uses=1]
 | 
						%tmp2 = icmp ne i32 %tmp1, 0		; <i1> [#uses=1]
 | 
				
			||||||
	%tmp23 = zext i1 %tmp2 to i8		; <i8> [#uses=1]
 | 
						%tmp23 = zext i1 %tmp2 to i8		; <i8> [#uses=1]
 | 
				
			||||||
@@ -22,12 +22,12 @@ entry:
 | 
				
			|||||||
	br i1 %toBool, label %bb, label %bb5
 | 
						br i1 %toBool, label %bb, label %bb5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb:		; preds = %entry
 | 
					bb:		; preds = %entry
 | 
				
			||||||
	%tmp4 = volatile load i32* %v, align 4		; <i32> [#uses=1]
 | 
						%tmp4 = load volatile i32* %v, align 4		; <i32> [#uses=1]
 | 
				
			||||||
	store i32 %tmp4, i32* %tmp, align 4
 | 
						store i32 %tmp4, i32* %tmp, align 4
 | 
				
			||||||
	br label %bb6
 | 
						br label %bb6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bb5:		; preds = %entry
 | 
					bb5:		; preds = %entry
 | 
				
			||||||
	volatile store i32 1, i32* %v, align 4
 | 
						store volatile i32 1, i32* %v, align 4
 | 
				
			||||||
	call void @g( )
 | 
						call void @g( )
 | 
				
			||||||
	store i32 0, i32* %tmp, align 4
 | 
						store i32 0, i32* %tmp, align 4
 | 
				
			||||||
	br label %bb6
 | 
						br label %bb6
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -167,7 +167,7 @@ entry:
 | 
				
			|||||||
loop:
 | 
					loop:
 | 
				
			||||||
  %c = bitcast i32* %x to i8*
 | 
					  %c = bitcast i32* %x to i8*
 | 
				
			||||||
  call void @objc_release(i8* %c) nounwind
 | 
					  call void @objc_release(i8* %c) nounwind
 | 
				
			||||||
  %j = volatile load i1* %q
 | 
					  %j = load volatile i1* %q
 | 
				
			||||||
  br i1 %j, label %loop, label %return
 | 
					  br i1 %j, label %loop, label %return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
return:
 | 
					return:
 | 
				
			||||||
@@ -190,7 +190,7 @@ entry:
 | 
				
			|||||||
loop:
 | 
					loop:
 | 
				
			||||||
  %a = bitcast i32* %x to i8*
 | 
					  %a = bitcast i32* %x to i8*
 | 
				
			||||||
  %0 = call i8* @objc_retain(i8* %a) nounwind
 | 
					  %0 = call i8* @objc_retain(i8* %a) nounwind
 | 
				
			||||||
  %j = volatile load i1* %q
 | 
					  %j = load volatile i1* %q
 | 
				
			||||||
  br i1 %j, label %loop, label %return
 | 
					  br i1 %j, label %loop, label %return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
return:
 | 
					return:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,7 +33,7 @@ entry:
 | 
				
			|||||||
define void @test1(i8* %p) {
 | 
					define void @test1(i8* %p) {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
  %0 = tail call i8* @objc_retain(i8* %p) nounwind
 | 
					  %0 = tail call i8* @objc_retain(i8* %p) nounwind
 | 
				
			||||||
  %tmp = volatile load i8** @x, align 8
 | 
					  %tmp = load volatile i8** @x, align 8
 | 
				
			||||||
  store i8* %0, i8** @x, align 8
 | 
					  store i8* %0, i8** @x, align 8
 | 
				
			||||||
  tail call void @objc_release(i8* %tmp) nounwind
 | 
					  tail call void @objc_release(i8* %tmp) nounwind
 | 
				
			||||||
  ret void
 | 
					  ret void
 | 
				
			||||||
@@ -53,7 +53,7 @@ define void @test2(i8* %p) {
 | 
				
			|||||||
entry:
 | 
					entry:
 | 
				
			||||||
  %0 = tail call i8* @objc_retain(i8* %p) nounwind
 | 
					  %0 = tail call i8* @objc_retain(i8* %p) nounwind
 | 
				
			||||||
  %tmp = load i8** @x, align 8
 | 
					  %tmp = load i8** @x, align 8
 | 
				
			||||||
  volatile store i8* %0, i8** @x, align 8
 | 
					  store volatile i8* %0, i8** @x, align 8
 | 
				
			||||||
  tail call void @objc_release(i8* %tmp) nounwind
 | 
					  tail call void @objc_release(i8* %tmp) nounwind
 | 
				
			||||||
  ret void
 | 
					  ret void
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,9 +4,9 @@
 | 
				
			|||||||
define i32 @voltest(i32 %T) {
 | 
					define i32 @voltest(i32 %T) {
 | 
				
			||||||
	%A = alloca {i32, i32}
 | 
						%A = alloca {i32, i32}
 | 
				
			||||||
	%B = getelementptr {i32,i32}* %A, i32 0, i32 0
 | 
						%B = getelementptr {i32,i32}* %A, i32 0, i32 0
 | 
				
			||||||
	volatile store i32 %T, i32* %B
 | 
						store volatile i32 %T, i32* %B
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	%C = getelementptr {i32,i32}* %A, i32 0, i32 1
 | 
						%C = getelementptr {i32,i32}* %A, i32 0, i32 1
 | 
				
			||||||
	%X = volatile load i32* %C
 | 
						%X = load volatile i32* %C
 | 
				
			||||||
	ret i32 %X
 | 
						ret i32 %X
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@ false:
 | 
				
			|||||||
  ret i32 0
 | 
					  ret i32 0
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
; But don't sink volatile loads...
 | 
					; But don't sink load volatiles...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
;      CHECK: @foo2
 | 
					;      CHECK: @foo2
 | 
				
			||||||
;      CHECK: load volatile
 | 
					;      CHECK: load volatile
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,7 +46,7 @@ else:		; preds = %entry
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
; This load can't be safely moved above the call because that would change the
 | 
					; This load can't be safely moved above the call because that would change the
 | 
				
			||||||
; order in which the volatile loads are performed.
 | 
					; order in which the load volatiles are performed.
 | 
				
			||||||
define fastcc i32 @no_tailrecelim_3(i32* %a_arg, i32 %a_len_arg, i32 %start_arg) nounwind {
 | 
					define fastcc i32 @no_tailrecelim_3(i32* %a_arg, i32 %a_len_arg, i32 %start_arg) nounwind {
 | 
				
			||||||
entry:
 | 
					entry:
 | 
				
			||||||
	%tmp2 = icmp sge i32 %start_arg, %a_len_arg		; <i1> [#uses=1]
 | 
						%tmp2 = icmp sge i32 %start_arg, %a_len_arg		; <i1> [#uses=1]
 | 
				
			||||||
@@ -58,7 +58,7 @@ if:		; preds = %entry
 | 
				
			|||||||
else:		; preds = %entry
 | 
					else:		; preds = %entry
 | 
				
			||||||
	%tmp7 = add i32 %start_arg, 1		; <i32> [#uses=1]
 | 
						%tmp7 = add i32 %start_arg, 1		; <i32> [#uses=1]
 | 
				
			||||||
	%tmp8 = call fastcc i32 @no_tailrecelim_3(i32* %a_arg, i32 %a_len_arg, i32 %tmp7)		; <i32> [#uses=1]
 | 
						%tmp8 = call fastcc i32 @no_tailrecelim_3(i32* %a_arg, i32 %a_len_arg, i32 %tmp7)		; <i32> [#uses=1]
 | 
				
			||||||
	%tmp9 = volatile load i32* %a_arg		; <i32> [#uses=1]
 | 
						%tmp9 = load volatile i32* %a_arg		; <i32> [#uses=1]
 | 
				
			||||||
	%tmp10 = add i32 %tmp9, %tmp8		; <i32> [#uses=1]
 | 
						%tmp10 = add i32 %tmp9, %tmp8		; <i32> [#uses=1]
 | 
				
			||||||
	ret i32 %tmp10
 | 
						ret i32 %tmp10
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user