1*9880d681SAndroid Build Coastguard Worker; RUN: opt -basicaa -gvn -S < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-f128:128:128-n8:16:32:64" 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; GVN shouldn't PRE the load around the loop backedge because it's 6*9880d681SAndroid Build Coastguard Worker; not actually redundant around the loop backedge, despite appearances 7*9880d681SAndroid Build Coastguard Worker; if phi-translation is ignored. 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Worker; CHECK: define void @test0(i8* %begin) 10*9880d681SAndroid Build Coastguard Worker; CHECK: loop: 11*9880d681SAndroid Build Coastguard Worker; CHECK: %l0 = load i8, i8* %phi 12*9880d681SAndroid Build Coastguard Worker; CHECK: call void @bar(i8 %l0) 13*9880d681SAndroid Build Coastguard Worker; CHECK: %l1 = load i8, i8* %phi 14*9880d681SAndroid Build Coastguard Workerdefine void @test0(i8* %begin) { 15*9880d681SAndroid Build Coastguard Workerentry: 16*9880d681SAndroid Build Coastguard Worker br label %loop 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Workerloop: 19*9880d681SAndroid Build Coastguard Worker %phi = phi i8* [ %begin, %entry ], [ %next, %loop ] 20*9880d681SAndroid Build Coastguard Worker %l0 = load i8, i8* %phi 21*9880d681SAndroid Build Coastguard Worker call void @bar(i8 %l0) 22*9880d681SAndroid Build Coastguard Worker %l1 = load i8, i8* %phi 23*9880d681SAndroid Build Coastguard Worker %next = getelementptr inbounds i8, i8* %phi, i8 %l1 24*9880d681SAndroid Build Coastguard Worker br label %loop 25*9880d681SAndroid Build Coastguard Worker} 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerdeclare void @bar(i8) 28