Index: llvm/test/Transforms/ObjCARC/basic.ll =================================================================== --- llvm/test/Transforms/ObjCARC/basic.ll +++ llvm/test/Transforms/ObjCARC/basic.ll @@ -2706,62 +2706,66 @@ declare i32 @puts(i8* nocapture) nounwind @str = internal constant [16 x i8] c"-[ Top0 _getX ]\00" -; CHECK: define { <2 x float>, <2 x float> } @"\01-[A z]"({}* %self, i8* nocapture %_cmd) [[NUW]] { -; CHECK-NOT: @llvm.objc. -; CHECK: } - -define {<2 x float>, <2 x float>} @"\01-[A z]"({}* %self, i8* nocapture %_cmd) nounwind { +; CHECK-LABEL: define { <2 x float>, <2 x float> } @"\01-[A z]"({}* %self, i8* nocapture %_cmd) +; CHECK: [[SELF_CAST0:%[0-9]+]] = bitcast {}* %self to i8* +; CHECK: tail call i8* @llvm.objc.retain(i8* [[SELF_CAST0]]) +; CHECK-NEXT: %call = tail call i32 (i8*, ...) @printf( +; CHECK: [[SELF_CAST1:%[0-9]+]] = bitcast {}* %self to i8* +; CHECK: tail call void @llvm.objc.release(i8* [[SELF_CAST1]]) +; CHECK: } +define { <2 x float>, <2 x float> } @"\01-[A z]"({}* %self, i8* nocapture %_cmd) nounwind { invoke.cont: - %0 = bitcast {}* %self to i8* - %1 = tail call i8* @llvm.objc.retain(i8* %0) nounwind + %i = bitcast {}* %self to i8* + %i1 = tail call i8* @llvm.objc.retain(i8* %i) nounwind tail call void @llvm.dbg.value(metadata {}* %self, metadata !DILocalVariable(scope: !2), metadata !DIExpression()), !dbg !DILocation(scope: !2) tail call void @llvm.dbg.value(metadata {}* %self, metadata !DILocalVariable(scope: !2), metadata !DIExpression()), !dbg !DILocation(scope: !2) %ivar = load i64, i64* @"OBJC_IVAR_$_A.myZ", align 8 - %add.ptr = getelementptr i8, i8* %0, i64 %ivar + %add.ptr = getelementptr i8, i8* %i, i64 %ivar %tmp1 = bitcast i8* %add.ptr to float* %tmp2 = load float, float* %tmp1, align 4 %conv = fpext float %tmp2 to double %add.ptr.sum = add i64 %ivar, 4 - %tmp6 = getelementptr inbounds i8, i8* %0, i64 %add.ptr.sum - %2 = bitcast i8* %tmp6 to float* - %tmp7 = load float, float* %2, align 4 + %tmp6 = getelementptr inbounds i8, i8* %i, i64 %add.ptr.sum + %i2 = bitcast i8* %tmp6 to float* + %tmp7 = load float, float* %i2, align 4 %conv8 = fpext float %tmp7 to double %add.ptr.sum36 = add i64 %ivar, 8 - %tmp12 = getelementptr inbounds i8, i8* %0, i64 %add.ptr.sum36 + %tmp12 = getelementptr inbounds i8, i8* %i, i64 %add.ptr.sum36 %arrayidx = bitcast i8* %tmp12 to float* %tmp13 = load float, float* %arrayidx, align 4 %conv14 = fpext float %tmp13 to double %tmp12.sum = add i64 %ivar, 12 - %arrayidx19 = getelementptr inbounds i8, i8* %0, i64 %tmp12.sum - %3 = bitcast i8* %arrayidx19 to float* - %tmp20 = load float, float* %3, align 4 + %arrayidx19 = getelementptr inbounds i8, i8* %i, i64 %tmp12.sum + %i3 = bitcast i8* %arrayidx19 to float* + %tmp20 = load float, float* %i3, align 4 %conv21 = fpext float %tmp20 to double %call = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str4, i64 0, i64 0), double %conv, double %conv8, double %conv14, double %conv21) %ivar23 = load i64, i64* @"OBJC_IVAR_$_A.myZ", align 8 - %add.ptr24 = getelementptr i8, i8* %0, i64 %ivar23 - %4 = bitcast i8* %add.ptr24 to i128* - %srcval = load i128, i128* %4, align 4 - tail call void @llvm.objc.release(i8* %0) nounwind + %add.ptr24 = getelementptr i8, i8* %i, i64 %ivar23 + %i4 = bitcast i8* %add.ptr24 to i128* + %srcval = load i128, i128* %i4, align 4 + tail call void @llvm.objc.release(i8* %i) nounwind %tmp29 = trunc i128 %srcval to i64 %tmp30 = bitcast i64 %tmp29 to <2 x float> - %tmp31 = insertvalue {<2 x float>, <2 x float>} undef, <2 x float> %tmp30, 0 + %tmp31 = insertvalue { <2 x float>, <2 x float> } undef, <2 x float> %tmp30, 0 %tmp32 = lshr i128 %srcval, 64 %tmp33 = trunc i128 %tmp32 to i64 %tmp34 = bitcast i64 %tmp33 to <2 x float> - %tmp35 = insertvalue {<2 x float>, <2 x float>} %tmp31, <2 x float> %tmp34, 1 - ret {<2 x float>, <2 x float>} %tmp35 + %tmp35 = insertvalue { <2 x float>, <2 x float> } %tmp31, <2 x float> %tmp34, 1 + ret { <2 x float>, <2 x float> } %tmp35 } -; CHECK: @"\01-[Top0 _getX]"({}* %self, i8* nocapture %_cmd) [[NUW]] { -; CHECK-NOT: @llvm.objc. -; CHECK: } - +; CHECK-LABEL: @"\01-[Top0 _getX]"({}* %self, i8* nocapture %_cmd) +; CHECK: %i = bitcast {}* %self to i8* +; CHECK: tail call i8* @llvm.objc.retain(i8* %i) +; CHECK: %puts = tail call i32 @puts +; CHECK: tail call void @llvm.objc.release(i8* %i) define i32 @"\01-[Top0 _getX]"({}* %self, i8* nocapture %_cmd) nounwind { invoke.cont: - %0 = bitcast {}* %self to i8* - %1 = tail call i8* @llvm.objc.retain(i8* %0) nounwind + %i = bitcast {}* %self to i8* + %i1 = tail call i8* @llvm.objc.retain(i8* %i) nounwind %puts = tail call i32 @puts(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @str, i64 0, i64 0)) - tail call void @llvm.objc.release(i8* %0) nounwind + tail call void @llvm.objc.release(i8* %i) nounwind ret i32 0 }