1*9880d681SAndroid Build Coastguard Worker; RUN: llc %s -o - -verify-machineinstrs | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:o-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32" 4*9880d681SAndroid Build Coastguard Workertarget triple = "thumbv7-unknown-unknown" 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker%struct.ref_s = type { %union.v, i16, i16 } 7*9880d681SAndroid Build Coastguard Worker%union.v = type { i32 } 8*9880d681SAndroid Build Coastguard Worker%struct.gs_color_s = type { i16, i16, i16, i16, i8, i8 } 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker; In this case, the if converter was cloning the return instruction so that we had 11*9880d681SAndroid Build Coastguard Worker; r2<def> = ... 12*9880d681SAndroid Build Coastguard Worker; return [pred] r2<dead,def> 13*9880d681SAndroid Build Coastguard Worker; ldr <r2, kill> 14*9880d681SAndroid Build Coastguard Worker; return 15*9880d681SAndroid Build Coastguard Worker; The problem here was that the dead def on the first return was making the machine verifier 16*9880d681SAndroid Build Coastguard Worker; think that the load read from an undefined register. We need to remove the dead flag from 17*9880d681SAndroid Build Coastguard Worker; the return, and also add an implicit use of the prior value of r2. 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker; CHECK: ldrh 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker; Function Attrs: minsize nounwind optsize ssp 22*9880d681SAndroid Build Coastguard Workerdefine i32 @test(%struct.ref_s* %pref1, %struct.ref_s* %pref2, %struct.gs_color_s** %tmp152) #0 { 23*9880d681SAndroid Build Coastguard Workerbb: 24*9880d681SAndroid Build Coastguard Worker %nref = alloca %struct.ref_s, align 4 25*9880d681SAndroid Build Coastguard Worker %tmp46 = call %struct.ref_s* @name_string_ref(%struct.ref_s* %pref1, %struct.ref_s* %nref) #2 26*9880d681SAndroid Build Coastguard Worker %tmp153 = load %struct.gs_color_s*, %struct.gs_color_s** %tmp152, align 4 27*9880d681SAndroid Build Coastguard Worker %tmp154 = bitcast %struct.ref_s* %pref2 to %struct.gs_color_s** 28*9880d681SAndroid Build Coastguard Worker %tmp155 = load %struct.gs_color_s*, %struct.gs_color_s** %tmp154, align 4 29*9880d681SAndroid Build Coastguard Worker %tmp162 = getelementptr inbounds %struct.gs_color_s, %struct.gs_color_s* %tmp153, i32 0, i32 1 30*9880d681SAndroid Build Coastguard Worker %tmp163 = load i16, i16* %tmp162, align 2 31*9880d681SAndroid Build Coastguard Worker %tmp164 = getelementptr inbounds %struct.gs_color_s, %struct.gs_color_s* %tmp155, i32 0, i32 1 32*9880d681SAndroid Build Coastguard Worker %tmp165 = load i16, i16* %tmp164, align 2 33*9880d681SAndroid Build Coastguard Worker %tmp166 = icmp eq i16 %tmp163, %tmp165 34*9880d681SAndroid Build Coastguard Worker br i1 %tmp166, label %bb167, label %bb173 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Workerbb167: ; preds = %bb 37*9880d681SAndroid Build Coastguard Worker %tmp168 = getelementptr inbounds %struct.gs_color_s, %struct.gs_color_s* %tmp153, i32 0, i32 2 38*9880d681SAndroid Build Coastguard Worker %tmp169 = load i16, i16* %tmp168, align 2 39*9880d681SAndroid Build Coastguard Worker %tmp170 = getelementptr inbounds %struct.gs_color_s, %struct.gs_color_s* %tmp155, i32 0, i32 2 40*9880d681SAndroid Build Coastguard Worker %tmp171 = load i16, i16* %tmp170, align 2 41*9880d681SAndroid Build Coastguard Worker %tmp172 = icmp eq i16 %tmp169, %tmp171 42*9880d681SAndroid Build Coastguard Worker br label %bb173 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerbb173: ; preds = %bb167, %bb 45*9880d681SAndroid Build Coastguard Worker %tmp174 = phi i1 [ false, %bb ], [ %tmp172, %bb167 ] 46*9880d681SAndroid Build Coastguard Worker %tmp175 = zext i1 %tmp174 to i32 47*9880d681SAndroid Build Coastguard Worker ret i32 %tmp175 48*9880d681SAndroid Build Coastguard Worker} 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker; Function Attrs: minsize optsize 51*9880d681SAndroid Build Coastguard Workerdeclare %struct.ref_s* @name_string_ref(%struct.ref_s*, %struct.ref_s*) #1 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Workerattributes #0 = { minsize nounwind optsize } 54*9880d681SAndroid Build Coastguard Workerattributes #1 = { minsize optsize } 55*9880d681SAndroid Build Coastguard Workerattributes #2 = { minsize nounwind optsize } 56