|
; ModuleID = './WString.cpp' |
|
target datalayout = "e-p:16:8:8-i8:8:8-i16:8:8-i32:8:8-i64:8:8-f32:8:8-f64:8:8-n8" |
|
target triple = "avr" |
|
|
|
%class.String = type { i8*, i16, i16 } |
|
%class.__FlashStringHelper = type opaque |
|
%class.StringSumHelper = type { %class.String } |
|
|
|
@_ZZN6StringixEjE19dummy_writable_char = internal global i8 0, align 1 |
|
@.str = private unnamed_addr constant [1 x i8] zeroinitializer, align 1 |
|
|
|
@_ZN6StringC1EPKc = alias void (%class.String*, i8*)* @_ZN6StringC2EPKc |
|
@_ZN6StringC1ERKS_ = alias void (%class.String*, %class.String*)* @_ZN6StringC2ERKS_ |
|
@_ZN6StringC1EPK19__FlashStringHelper = alias void (%class.String*, %class.__FlashStringHelper*)* @_ZN6StringC2EPK19__FlashStringHelper |
|
@_ZN6StringC1Ec = alias void (%class.String*, i8)* @_ZN6StringC2Ec |
|
@_ZN6StringC1Ehh = alias void (%class.String*, i8, i8)* @_ZN6StringC2Ehh |
|
@_ZN6StringC1Eih = alias void (%class.String*, i16, i8)* @_ZN6StringC2Eih |
|
@_ZN6StringC1Ejh = alias void (%class.String*, i16, i8)* @_ZN6StringC2Ejh |
|
@_ZN6StringC1Elh = alias void (%class.String*, i32, i8)* @_ZN6StringC2Elh |
|
@_ZN6StringC1Emh = alias void (%class.String*, i32, i8)* @_ZN6StringC2Emh |
|
@_ZN6StringC1Efh = alias void (%class.String*, float, i8)* @_ZN6StringC2Efh |
|
@_ZN6StringC1Edh = alias void (%class.String*, double, i8)* @_ZN6StringC2Edh |
|
@_ZN6StringD1Ev = alias void (%class.String*)* @_ZN6StringD2Ev |
|
|
|
; Function Attrs: nounwind |
|
define void @_ZN6StringC2EPKc(%class.String* nocapture %this, i8* readonly %cstr) unnamed_addr #0 align 2 { |
|
entry: |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%capacity.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
%tobool = icmp eq i8* %cstr, null |
|
br i1 %tobool, label %if.end, label %if.end.i.i |
|
|
|
if.end.i.i: ; preds = %entry |
|
%call = tail call i16 @strlen(i8* %cstr) #5 |
|
%add.i.i.i = add i16 %call, 1 |
|
%call.i.i.i = tail call noalias i8* @realloc(i8* null, i16 %add.i.i.i) #3 |
|
%tobool.i.i.i = icmp eq i8* %call.i.i.i, null |
|
br i1 %tobool.i.i.i, label %if.then.i, label %if.then.3.i.i |
|
|
|
if.then.3.i.i: ; preds = %if.end.i.i |
|
store i8* %call.i.i.i, i8** %buffer.i, align 2, !tbaa !1 |
|
store i16 %call, i16* %capacity.i, align 2, !tbaa !7 |
|
%0 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp4.i.i = icmp eq i16 %0, 0 |
|
br i1 %cmp4.i.i, label %if.then.5.i.i, label %if.end.i |
|
|
|
if.then.5.i.i: ; preds = %if.then.3.i.i |
|
store i8 0, i8* %call.i.i.i, align 1, !tbaa !9 |
|
br label %if.end.i |
|
|
|
if.then.i: ; preds = %if.end.i.i |
|
%1 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i.5.i = icmp eq i8* %1, null |
|
br i1 %tobool.i.5.i, label %_ZN6String10invalidateEv.exit.i, label %if.then.i.i |
|
|
|
if.then.i.i: ; preds = %if.then.i |
|
tail call void @free(i8* %1) #3 |
|
br label %_ZN6String10invalidateEv.exit.i |
|
|
|
_ZN6String10invalidateEv.exit.i: ; preds = %if.then.i.i, %if.then.i |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
br label %if.end |
|
|
|
if.end.i: ; preds = %if.then.5.i.i, %if.then.3.i.i |
|
store i16 %call, i16* %len.i, align 2, !tbaa !8 |
|
%call2.i = tail call i8* @strcpy(i8* %call.i.i.i, i8* %cstr) #3 |
|
br label %if.end |
|
|
|
if.end: ; preds = %if.end.i, %_ZN6String10invalidateEv.exit.i, %entry |
|
ret void |
|
} |
|
|
|
; Function Attrs: nounwind |
|
define dereferenceable(6) %class.String* @_ZN6String4copyEPKcj(%class.String* %this, i8* nocapture readonly %cstr, i16 %length) #0 align 2 { |
|
entry: |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%0 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i = icmp eq i8* %0, null |
|
br i1 %tobool.i, label %if.end.i, label %land.lhs.true.i |
|
|
|
land.lhs.true.i: ; preds = %entry |
|
%capacity.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
%1 = load i16, i16* %capacity.i, align 2, !tbaa !7 |
|
%cmp.i = icmp ult i16 %1, %length |
|
br i1 %cmp.i, label %if.end.i, label %land.lhs.true.i.if.end_crit_edge |
|
|
|
land.lhs.true.i.if.end_crit_edge: ; preds = %land.lhs.true.i |
|
%.pre = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
br label %if.end |
|
|
|
if.end.i: ; preds = %land.lhs.true.i, %entry |
|
%add.i.i = add i16 %length, 1 |
|
%call.i.i = tail call noalias i8* @realloc(i8* %0, i16 %add.i.i) #3 |
|
%tobool.i.i = icmp eq i8* %call.i.i, null |
|
br i1 %tobool.i.i, label %if.then, label %if.then.3.i |
|
|
|
if.then.3.i: ; preds = %if.end.i |
|
store i8* %call.i.i, i8** %buffer.i, align 2, !tbaa !1 |
|
%capacity.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 %length, i16* %capacity.i.i, align 2, !tbaa !7 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%2 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp4.i = icmp eq i16 %2, 0 |
|
br i1 %cmp4.i, label %if.then.5.i, label %if.end |
|
|
|
if.then.5.i: ; preds = %if.then.3.i |
|
store i8 0, i8* %call.i.i, align 1, !tbaa !9 |
|
br label %if.end |
|
|
|
if.then: ; preds = %if.end.i |
|
%3 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i.5 = icmp eq i8* %3, null |
|
br i1 %tobool.i.5, label %_ZN6String10invalidateEv.exit, label %if.then.i |
|
|
|
if.then.i: ; preds = %if.then |
|
tail call void @free(i8* %3) #3 |
|
br label %_ZN6String10invalidateEv.exit |
|
|
|
_ZN6String10invalidateEv.exit: ; preds = %if.then, %if.then.i |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%len.i.6 = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
store i16 0, i16* %len.i.6, align 2, !tbaa !8 |
|
%capacity.i.7 = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 0, i16* %capacity.i.7, align 2, !tbaa !7 |
|
br label %return |
|
|
|
if.end: ; preds = %land.lhs.true.i.if.end_crit_edge, %if.then.5.i, %if.then.3.i |
|
%len.pre-phi = phi i16* [ %.pre, %land.lhs.true.i.if.end_crit_edge ], [ %len.i, %if.then.5.i ], [ %len.i, %if.then.3.i ] |
|
%4 = phi i8* [ %0, %land.lhs.true.i.if.end_crit_edge ], [ %call.i.i, %if.then.5.i ], [ %call.i.i, %if.then.3.i ] |
|
store i16 %length, i16* %len.pre-phi, align 2, !tbaa !8 |
|
%call2 = tail call i8* @strcpy(i8* %4, i8* %cstr) |
|
br label %return |
|
|
|
return: ; preds = %if.end, %_ZN6String10invalidateEv.exit |
|
ret %class.String* %this |
|
} |
|
|
|
; Function Attrs: nounwind readonly |
|
declare i16 @strlen(i8* nocapture) #1 |
|
|
|
; Function Attrs: nounwind |
|
define void @_ZN6StringC2ERKS_(%class.String* %this, %class.String* readonly dereferenceable(6) %value) unnamed_addr #0 align 2 { |
|
entry: |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%capacity.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
%call = tail call dereferenceable(6) %class.String* @_ZN6StringaSERKS_(%class.String* %this, %class.String* nonnull dereferenceable(6) %value) |
|
ret void |
|
} |
|
|
|
; Function Attrs: nounwind |
|
define dereferenceable(6) %class.String* @_ZN6StringaSERKS_(%class.String* %this, %class.String* readonly dereferenceable(6) %rhs) #0 align 2 { |
|
entry: |
|
%cmp = icmp eq %class.String* %this, %rhs |
|
br i1 %cmp, label %return, label %if.end |
|
|
|
if.end: ; preds = %entry |
|
%buffer = getelementptr inbounds %class.String, %class.String* %rhs, i16 0, i32 0 |
|
%0 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%tobool = icmp eq i8* %0, null |
|
br i1 %tobool, label %if.else, label %if.then.2 |
|
|
|
if.then.2: ; preds = %if.end |
|
%len = getelementptr inbounds %class.String, %class.String* %rhs, i16 0, i32 2 |
|
%1 = load i16, i16* %len, align 2, !tbaa !8 |
|
%buffer.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%2 = load i8*, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%tobool.i.i = icmp eq i8* %2, null |
|
br i1 %tobool.i.i, label %if.end.i.i, label %land.lhs.true.i.i |
|
|
|
land.lhs.true.i.i: ; preds = %if.then.2 |
|
%capacity.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
%3 = load i16, i16* %capacity.i.i, align 2, !tbaa !7 |
|
%cmp.i.i = icmp ult i16 %3, %1 |
|
br i1 %cmp.i.i, label %if.end.i.i, label %land.lhs.true.i.if.end_crit_edge.i |
|
|
|
land.lhs.true.i.if.end_crit_edge.i: ; preds = %land.lhs.true.i.i |
|
%.pre.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
br label %if.end.i |
|
|
|
if.end.i.i: ; preds = %land.lhs.true.i.i, %if.then.2 |
|
%add.i.i.i = add i16 %1, 1 |
|
%call.i.i.i = tail call noalias i8* @realloc(i8* %2, i16 %add.i.i.i) #3 |
|
%tobool.i.i.i = icmp eq i8* %call.i.i.i, null |
|
br i1 %tobool.i.i.i, label %if.then.i, label %if.then.3.i.i |
|
|
|
if.then.3.i.i: ; preds = %if.end.i.i |
|
store i8* %call.i.i.i, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%capacity.i.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 %1, i16* %capacity.i.i.i, align 2, !tbaa !7 |
|
%len.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%4 = load i16, i16* %len.i.i, align 2, !tbaa !8 |
|
%cmp4.i.i = icmp eq i16 %4, 0 |
|
br i1 %cmp4.i.i, label %if.then.5.i.i, label %if.end.i |
|
|
|
if.then.5.i.i: ; preds = %if.then.3.i.i |
|
store i8 0, i8* %call.i.i.i, align 1, !tbaa !9 |
|
br label %if.end.i |
|
|
|
if.then.i: ; preds = %if.end.i.i |
|
%5 = load i8*, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%tobool.i.5.i = icmp eq i8* %5, null |
|
br i1 %tobool.i.5.i, label %_ZN6String10invalidateEv.exit.i, label %if.then.i.i |
|
|
|
if.then.i.i: ; preds = %if.then.i |
|
tail call void @free(i8* %5) #3 |
|
br label %_ZN6String10invalidateEv.exit.i |
|
|
|
_ZN6String10invalidateEv.exit.i: ; preds = %if.then.i.i, %if.then.i |
|
store i8* null, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%len.i.6.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
store i16 0, i16* %len.i.6.i, align 2, !tbaa !8 |
|
%capacity.i.7.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 0, i16* %capacity.i.7.i, align 2, !tbaa !7 |
|
br label %return |
|
|
|
if.end.i: ; preds = %if.then.5.i.i, %if.then.3.i.i, %land.lhs.true.i.if.end_crit_edge.i |
|
%len.pre-phi.i = phi i16* [ %.pre.i, %land.lhs.true.i.if.end_crit_edge.i ], [ %len.i.i, %if.then.5.i.i ], [ %len.i.i, %if.then.3.i.i ] |
|
%6 = phi i8* [ %2, %land.lhs.true.i.if.end_crit_edge.i ], [ %call.i.i.i, %if.then.5.i.i ], [ %call.i.i.i, %if.then.3.i.i ] |
|
store i16 %1, i16* %len.pre-phi.i, align 2, !tbaa !8 |
|
%call2.i = tail call i8* @strcpy(i8* %6, i8* %0) #3 |
|
br label %return |
|
|
|
if.else: ; preds = %if.end |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%7 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i = icmp eq i8* %7, null |
|
br i1 %tobool.i, label %_ZN6String10invalidateEv.exit, label %if.then.i.8 |
|
|
|
if.then.i.8: ; preds = %if.else |
|
tail call void @free(i8* %7) #3 |
|
br label %_ZN6String10invalidateEv.exit |
|
|
|
_ZN6String10invalidateEv.exit: ; preds = %if.else, %if.then.i.8 |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
%capacity.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
br label %return |
|
|
|
return: ; preds = %if.end.i, %_ZN6String10invalidateEv.exit.i, %_ZN6String10invalidateEv.exit, %entry |
|
ret %class.String* %this |
|
} |
|
|
|
define void @_ZN6StringC2EPK19__FlashStringHelper(%class.String* %this, %class.__FlashStringHelper* %pstr) unnamed_addr #2 align 2 { |
|
entry: |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%capacity.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
%call = tail call dereferenceable(6) %class.String* @_ZN6StringaSEPK19__FlashStringHelper(%class.String* %this, %class.__FlashStringHelper* %pstr) |
|
ret void |
|
} |
|
|
|
define dereferenceable(6) %class.String* @_ZN6StringaSEPK19__FlashStringHelper(%class.String* %this, %class.__FlashStringHelper* %pstr) #2 align 2 { |
|
entry: |
|
%tobool = icmp eq %class.__FlashStringHelper* %pstr, null |
|
br i1 %tobool, label %if.else, label %if.then |
|
|
|
if.then: ; preds = %entry |
|
%0 = bitcast %class.__FlashStringHelper* %pstr to i8* |
|
%call.i = tail call i16 @__strlen_P(i8* %0) #6 |
|
%buffer.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%1 = load i8*, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%tobool.i.i = icmp eq i8* %1, null |
|
br i1 %tobool.i.i, label %if.end.i.i, label %land.lhs.true.i.i |
|
|
|
land.lhs.true.i.i: ; preds = %if.then |
|
%capacity.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
%2 = load i16, i16* %capacity.i.i, align 2, !tbaa !7 |
|
%cmp.i.i = icmp ult i16 %2, %call.i |
|
br i1 %cmp.i.i, label %if.end.i.i, label %land.lhs.true.i.if.end_crit_edge.i |
|
|
|
land.lhs.true.i.if.end_crit_edge.i: ; preds = %land.lhs.true.i.i |
|
%.pre.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
br label %if.end.i |
|
|
|
if.end.i.i: ; preds = %land.lhs.true.i.i, %if.then |
|
%add.i.i.i = add i16 %call.i, 1 |
|
%call.i.i.i = tail call noalias i8* @realloc(i8* %1, i16 %add.i.i.i) #3 |
|
%tobool.i.i.i = icmp eq i8* %call.i.i.i, null |
|
br i1 %tobool.i.i.i, label %if.then.i, label %if.then.3.i.i |
|
|
|
if.then.3.i.i: ; preds = %if.end.i.i |
|
store i8* %call.i.i.i, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%capacity.i.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 %call.i, i16* %capacity.i.i.i, align 2, !tbaa !7 |
|
%len.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%3 = load i16, i16* %len.i.i, align 2, !tbaa !8 |
|
%cmp4.i.i = icmp eq i16 %3, 0 |
|
br i1 %cmp4.i.i, label %if.then.5.i.i, label %if.end.i |
|
|
|
if.then.5.i.i: ; preds = %if.then.3.i.i |
|
store i8 0, i8* %call.i.i.i, align 1, !tbaa !9 |
|
br label %if.end.i |
|
|
|
if.then.i: ; preds = %if.end.i.i |
|
%4 = load i8*, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%tobool.i.5.i = icmp eq i8* %4, null |
|
br i1 %tobool.i.5.i, label %_ZN6String10invalidateEv.exit.i, label %if.then.i.i |
|
|
|
if.then.i.i: ; preds = %if.then.i |
|
tail call void @free(i8* %4) #3 |
|
br label %_ZN6String10invalidateEv.exit.i |
|
|
|
_ZN6String10invalidateEv.exit.i: ; preds = %if.then.i.i, %if.then.i |
|
store i8* null, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%len.i.6.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
store i16 0, i16* %len.i.6.i, align 2, !tbaa !8 |
|
%capacity.i.7.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 0, i16* %capacity.i.7.i, align 2, !tbaa !7 |
|
br label %if.end |
|
|
|
if.end.i: ; preds = %if.then.5.i.i, %if.then.3.i.i, %land.lhs.true.i.if.end_crit_edge.i |
|
%len.pre-phi.i = phi i16* [ %.pre.i, %land.lhs.true.i.if.end_crit_edge.i ], [ %len.i.i, %if.then.5.i.i ], [ %len.i.i, %if.then.3.i.i ] |
|
%5 = phi i8* [ %1, %land.lhs.true.i.if.end_crit_edge.i ], [ %call.i.i.i, %if.then.5.i.i ], [ %call.i.i.i, %if.then.3.i.i ] |
|
store i16 %call.i, i16* %len.pre-phi.i, align 2, !tbaa !8 |
|
%call2.i = tail call i8* @strcpy_P(i8* %5, i8* %0) |
|
br label %if.end |
|
|
|
if.else: ; preds = %entry |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%6 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i = icmp eq i8* %6, null |
|
br i1 %tobool.i, label %_ZN6String10invalidateEv.exit, label %if.then.i.5 |
|
|
|
if.then.i.5: ; preds = %if.else |
|
tail call void @free(i8* %6) #3 |
|
br label %_ZN6String10invalidateEv.exit |
|
|
|
_ZN6String10invalidateEv.exit: ; preds = %if.else, %if.then.i.5 |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
%capacity.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
br label %if.end |
|
|
|
if.end: ; preds = %if.end.i, %_ZN6String10invalidateEv.exit.i, %_ZN6String10invalidateEv.exit |
|
ret %class.String* %this |
|
} |
|
|
|
; Function Attrs: nounwind |
|
define void @_ZN6StringC2Ec(%class.String* %this, i8 signext %c) unnamed_addr #0 align 2 { |
|
entry: |
|
%buf = alloca [2 x i8], align 1 |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%capacity.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
%0 = getelementptr inbounds [2 x i8], [2 x i8]* %buf, i16 0, i16 0 |
|
call void @llvm.lifetime.start(i64 2, i8* %0) #3 |
|
store i8 %c, i8* %0, align 1, !tbaa !9 |
|
%arrayidx2 = getelementptr inbounds [2 x i8], [2 x i8]* %buf, i16 0, i16 1 |
|
store i8 0, i8* %arrayidx2, align 1, !tbaa !9 |
|
%call = call dereferenceable(6) %class.String* @_ZN6StringaSEPKc(%class.String* %this, i8* %0) |
|
call void @llvm.lifetime.end(i64 2, i8* %0) #3 |
|
ret void |
|
} |
|
|
|
; Function Attrs: nounwind |
|
declare void @llvm.lifetime.start(i64, i8* nocapture) #3 |
|
|
|
; Function Attrs: nounwind |
|
define dereferenceable(6) %class.String* @_ZN6StringaSEPKc(%class.String* %this, i8* readonly %cstr) #0 align 2 { |
|
entry: |
|
%tobool = icmp eq i8* %cstr, null |
|
br i1 %tobool, label %if.else, label %if.then |
|
|
|
if.then: ; preds = %entry |
|
%call = tail call i16 @strlen(i8* %cstr) #5 |
|
%buffer.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%0 = load i8*, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%tobool.i.i = icmp eq i8* %0, null |
|
br i1 %tobool.i.i, label %if.end.i.i, label %land.lhs.true.i.i |
|
|
|
land.lhs.true.i.i: ; preds = %if.then |
|
%capacity.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
%1 = load i16, i16* %capacity.i.i, align 2, !tbaa !7 |
|
%cmp.i.i = icmp ult i16 %1, %call |
|
br i1 %cmp.i.i, label %if.end.i.i, label %land.lhs.true.i.if.end_crit_edge.i |
|
|
|
land.lhs.true.i.if.end_crit_edge.i: ; preds = %land.lhs.true.i.i |
|
%.pre.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
br label %if.end.i |
|
|
|
if.end.i.i: ; preds = %land.lhs.true.i.i, %if.then |
|
%add.i.i.i = add i16 %call, 1 |
|
%call.i.i.i = tail call noalias i8* @realloc(i8* %0, i16 %add.i.i.i) #3 |
|
%tobool.i.i.i = icmp eq i8* %call.i.i.i, null |
|
br i1 %tobool.i.i.i, label %if.then.i, label %if.then.3.i.i |
|
|
|
if.then.3.i.i: ; preds = %if.end.i.i |
|
store i8* %call.i.i.i, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%capacity.i.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 %call, i16* %capacity.i.i.i, align 2, !tbaa !7 |
|
%len.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%2 = load i16, i16* %len.i.i, align 2, !tbaa !8 |
|
%cmp4.i.i = icmp eq i16 %2, 0 |
|
br i1 %cmp4.i.i, label %if.then.5.i.i, label %if.end.i |
|
|
|
if.then.5.i.i: ; preds = %if.then.3.i.i |
|
store i8 0, i8* %call.i.i.i, align 1, !tbaa !9 |
|
br label %if.end.i |
|
|
|
if.then.i: ; preds = %if.end.i.i |
|
%3 = load i8*, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%tobool.i.5.i = icmp eq i8* %3, null |
|
br i1 %tobool.i.5.i, label %_ZN6String10invalidateEv.exit.i, label %if.then.i.i |
|
|
|
if.then.i.i: ; preds = %if.then.i |
|
tail call void @free(i8* %3) #3 |
|
br label %_ZN6String10invalidateEv.exit.i |
|
|
|
_ZN6String10invalidateEv.exit.i: ; preds = %if.then.i.i, %if.then.i |
|
store i8* null, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%len.i.6.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
store i16 0, i16* %len.i.6.i, align 2, !tbaa !8 |
|
%capacity.i.7.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 0, i16* %capacity.i.7.i, align 2, !tbaa !7 |
|
br label %if.end |
|
|
|
if.end.i: ; preds = %if.then.5.i.i, %if.then.3.i.i, %land.lhs.true.i.if.end_crit_edge.i |
|
%len.pre-phi.i = phi i16* [ %.pre.i, %land.lhs.true.i.if.end_crit_edge.i ], [ %len.i.i, %if.then.5.i.i ], [ %len.i.i, %if.then.3.i.i ] |
|
%4 = phi i8* [ %0, %land.lhs.true.i.if.end_crit_edge.i ], [ %call.i.i.i, %if.then.5.i.i ], [ %call.i.i.i, %if.then.3.i.i ] |
|
store i16 %call, i16* %len.pre-phi.i, align 2, !tbaa !8 |
|
%call2.i = tail call i8* @strcpy(i8* %4, i8* %cstr) #3 |
|
br label %if.end |
|
|
|
if.else: ; preds = %entry |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%5 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i = icmp eq i8* %5, null |
|
br i1 %tobool.i, label %_ZN6String10invalidateEv.exit, label %if.then.i.5 |
|
|
|
if.then.i.5: ; preds = %if.else |
|
tail call void @free(i8* %5) #3 |
|
br label %_ZN6String10invalidateEv.exit |
|
|
|
_ZN6String10invalidateEv.exit: ; preds = %if.else, %if.then.i.5 |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
%capacity.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
br label %if.end |
|
|
|
if.end: ; preds = %if.end.i, %_ZN6String10invalidateEv.exit.i, %_ZN6String10invalidateEv.exit |
|
ret %class.String* %this |
|
} |
|
|
|
; Function Attrs: nounwind |
|
declare void @llvm.lifetime.end(i64, i8* nocapture) #3 |
|
|
|
define void @_ZN6StringC2Ehh(%class.String* %this, i8 zeroext %value, i8 zeroext %base) unnamed_addr #2 align 2 { |
|
entry: |
|
%buf = alloca [9 x i8], align 1 |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%capacity.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
%0 = getelementptr inbounds [9 x i8], [9 x i8]* %buf, i16 0, i16 0 |
|
call void @llvm.lifetime.start(i64 9, i8* %0) #3 |
|
%conv = zext i8 %value to i16 |
|
%conv2 = zext i8 %base to i16 |
|
%call.i = call i8* @__utoa(i16 %conv, i8* %0, i16 %conv2) |
|
%call4 = call dereferenceable(6) %class.String* @_ZN6StringaSEPKc(%class.String* %this, i8* %0) |
|
call void @llvm.lifetime.end(i64 9, i8* %0) #3 |
|
ret void |
|
} |
|
|
|
define void @_ZN6StringC2Eih(%class.String* %this, i16 %value, i8 zeroext %base) unnamed_addr #2 align 2 { |
|
entry: |
|
%buf = alloca [18 x i8], align 1 |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%capacity.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
%0 = getelementptr inbounds [18 x i8], [18 x i8]* %buf, i16 0, i16 0 |
|
call void @llvm.lifetime.start(i64 18, i8* %0) #3 |
|
%conv = zext i8 %base to i16 |
|
%call.i = call i8* @__itoa(i16 %value, i8* %0, i16 %conv) |
|
%call3 = call dereferenceable(6) %class.String* @_ZN6StringaSEPKc(%class.String* %this, i8* %0) |
|
call void @llvm.lifetime.end(i64 18, i8* %0) #3 |
|
ret void |
|
} |
|
|
|
define void @_ZN6StringC2Ejh(%class.String* %this, i16 %value, i8 zeroext %base) unnamed_addr #2 align 2 { |
|
entry: |
|
%buf = alloca [17 x i8], align 1 |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%capacity.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
%0 = getelementptr inbounds [17 x i8], [17 x i8]* %buf, i16 0, i16 0 |
|
call void @llvm.lifetime.start(i64 17, i8* %0) #3 |
|
%conv = zext i8 %base to i16 |
|
%call.i = call i8* @__utoa(i16 %value, i8* %0, i16 %conv) |
|
%call3 = call dereferenceable(6) %class.String* @_ZN6StringaSEPKc(%class.String* %this, i8* %0) |
|
call void @llvm.lifetime.end(i64 17, i8* %0) #3 |
|
ret void |
|
} |
|
|
|
define void @_ZN6StringC2Elh(%class.String* %this, i32 %value, i8 zeroext %base) unnamed_addr #2 align 2 { |
|
entry: |
|
%buf = alloca [34 x i8], align 1 |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%capacity.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
%0 = getelementptr inbounds [34 x i8], [34 x i8]* %buf, i16 0, i16 0 |
|
call void @llvm.lifetime.start(i64 34, i8* %0) #3 |
|
%conv = zext i8 %base to i16 |
|
%call.i = call i8* @__ltoa(i32 %value, i8* %0, i16 %conv) |
|
%call3 = call dereferenceable(6) %class.String* @_ZN6StringaSEPKc(%class.String* %this, i8* %0) |
|
call void @llvm.lifetime.end(i64 34, i8* %0) #3 |
|
ret void |
|
} |
|
|
|
define void @_ZN6StringC2Emh(%class.String* %this, i32 %value, i8 zeroext %base) unnamed_addr #2 align 2 { |
|
entry: |
|
%buf = alloca [33 x i8], align 1 |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%capacity.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
%0 = getelementptr inbounds [33 x i8], [33 x i8]* %buf, i16 0, i16 0 |
|
call void @llvm.lifetime.start(i64 33, i8* %0) #3 |
|
%conv = zext i8 %base to i16 |
|
%call.i = call i8* @__ultoa(i32 %value, i8* %0, i16 %conv) |
|
%call3 = call dereferenceable(6) %class.String* @_ZN6StringaSEPKc(%class.String* %this, i8* %0) |
|
call void @llvm.lifetime.end(i64 33, i8* %0) #3 |
|
ret void |
|
} |
|
|
|
define void @_ZN6StringC2Efh(%class.String* %this, float %value, i8 zeroext %decimalPlaces) unnamed_addr #2 align 2 { |
|
entry: |
|
%buf = alloca [33 x i8], align 1 |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%capacity.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
%0 = getelementptr inbounds [33 x i8], [33 x i8]* %buf, i16 0, i16 0 |
|
call void @llvm.lifetime.start(i64 33, i8* %0) #3 |
|
%conv = fpext float %value to double |
|
%add = add i8 %decimalPlaces, 2 |
|
%call = call i8* @dtostrf(double %conv, i8 signext %add, i8 zeroext %decimalPlaces, i8* %0) |
|
%call4 = call dereferenceable(6) %class.String* @_ZN6StringaSEPKc(%class.String* %this, i8* %call) |
|
call void @llvm.lifetime.end(i64 33, i8* %0) #3 |
|
ret void |
|
} |
|
|
|
declare i8* @dtostrf(double, i8 signext, i8 zeroext, i8*) #2 |
|
|
|
define void @_ZN6StringC2Edh(%class.String* %this, double %value, i8 zeroext %decimalPlaces) unnamed_addr #2 align 2 { |
|
entry: |
|
%buf = alloca [33 x i8], align 1 |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%capacity.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
%0 = getelementptr inbounds [33 x i8], [33 x i8]* %buf, i16 0, i16 0 |
|
call void @llvm.lifetime.start(i64 33, i8* %0) #3 |
|
%add = add i8 %decimalPlaces, 2 |
|
%call = call i8* @dtostrf(double %value, i8 signext %add, i8 zeroext %decimalPlaces, i8* %0) |
|
%call3 = call dereferenceable(6) %class.String* @_ZN6StringaSEPKc(%class.String* %this, i8* %call) |
|
call void @llvm.lifetime.end(i64 33, i8* %0) #3 |
|
ret void |
|
} |
|
|
|
; Function Attrs: nounwind |
|
define void @_ZN6StringD2Ev(%class.String* nocapture readonly %this) unnamed_addr #0 align 2 { |
|
entry: |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%0 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
tail call void @free(i8* %0) |
|
ret void |
|
} |
|
|
|
; Function Attrs: nounwind |
|
declare void @free(i8* nocapture) #0 |
|
|
|
; Function Attrs: nounwind |
|
define void @_ZN6String10invalidateEv(%class.String* nocapture %this) #0 align 2 { |
|
entry: |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%0 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%tobool = icmp eq i8* %0, null |
|
br i1 %tobool, label %if.end, label %if.then |
|
|
|
if.then: ; preds = %entry |
|
tail call void @free(i8* %0) |
|
br label %if.end |
|
|
|
if.end: ; preds = %entry, %if.then |
|
store i8* null, i8** %buffer, align 2, !tbaa !1 |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
store i16 0, i16* %len, align 2, !tbaa !8 |
|
%capacity = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 0, i16* %capacity, align 2, !tbaa !7 |
|
ret void |
|
} |
|
|
|
; Function Attrs: nounwind |
|
define zeroext i8 @_ZN6String7reserveEj(%class.String* nocapture %this, i16 %size) #0 align 2 { |
|
entry: |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%0 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%tobool = icmp eq i8* %0, null |
|
br i1 %tobool, label %if.end, label %land.lhs.true |
|
|
|
land.lhs.true: ; preds = %entry |
|
%capacity = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
%1 = load i16, i16* %capacity, align 2, !tbaa !7 |
|
%cmp = icmp ult i16 %1, %size |
|
br i1 %cmp, label %if.end, label %return |
|
|
|
if.end: ; preds = %land.lhs.true, %entry |
|
%add.i = add i16 %size, 1 |
|
%call.i = tail call noalias i8* @realloc(i8* %0, i16 %add.i) #3 |
|
%tobool.i = icmp eq i8* %call.i, null |
|
br i1 %tobool.i, label %return, label %if.then.3 |
|
|
|
if.then.3: ; preds = %if.end |
|
store i8* %call.i, i8** %buffer, align 2, !tbaa !1 |
|
%capacity.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 %size, i16* %capacity.i, align 2, !tbaa !7 |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%2 = load i16, i16* %len, align 2, !tbaa !8 |
|
%cmp4 = icmp eq i16 %2, 0 |
|
br i1 %cmp4, label %if.then.5, label %return |
|
|
|
if.then.5: ; preds = %if.then.3 |
|
store i8 0, i8* %call.i, align 1, !tbaa !9 |
|
br label %return |
|
|
|
return: ; preds = %if.end, %if.then.3, %if.then.5, %land.lhs.true |
|
%retval.0 = phi i8 [ 1, %land.lhs.true ], [ 1, %if.then.5 ], [ 1, %if.then.3 ], [ 0, %if.end ] |
|
ret i8 %retval.0 |
|
} |
|
|
|
; Function Attrs: nounwind |
|
define zeroext i8 @_ZN6String12changeBufferEj(%class.String* nocapture %this, i16 %maxStrLen) #0 align 2 { |
|
entry: |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%0 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%add = add i16 %maxStrLen, 1 |
|
%call = tail call noalias i8* @realloc(i8* %0, i16 %add) |
|
%tobool = icmp eq i8* %call, null |
|
br i1 %tobool, label %cleanup, label %if.then |
|
|
|
if.then: ; preds = %entry |
|
store i8* %call, i8** %buffer, align 2, !tbaa !1 |
|
%capacity = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 %maxStrLen, i16* %capacity, align 2, !tbaa !7 |
|
br label %cleanup |
|
|
|
cleanup: ; preds = %entry, %if.then |
|
%retval.0 = phi i8 [ 1, %if.then ], [ 0, %entry ] |
|
ret i8 %retval.0 |
|
} |
|
|
|
; Function Attrs: nounwind |
|
declare noalias i8* @realloc(i8* nocapture, i16) #0 |
|
|
|
; Function Attrs: nounwind |
|
declare i8* @strcpy(i8*, i8* nocapture readonly) #0 |
|
|
|
define dereferenceable(6) %class.String* @_ZN6String4copyEPK19__FlashStringHelperj(%class.String* %this, %class.__FlashStringHelper* %pstr, i16 %length) #2 align 2 { |
|
entry: |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%0 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i = icmp eq i8* %0, null |
|
br i1 %tobool.i, label %if.end.i, label %land.lhs.true.i |
|
|
|
land.lhs.true.i: ; preds = %entry |
|
%capacity.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
%1 = load i16, i16* %capacity.i, align 2, !tbaa !7 |
|
%cmp.i = icmp ult i16 %1, %length |
|
br i1 %cmp.i, label %if.end.i, label %land.lhs.true.i.if.end_crit_edge |
|
|
|
land.lhs.true.i.if.end_crit_edge: ; preds = %land.lhs.true.i |
|
%.pre = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
br label %if.end |
|
|
|
if.end.i: ; preds = %land.lhs.true.i, %entry |
|
%add.i.i = add i16 %length, 1 |
|
%call.i.i = tail call noalias i8* @realloc(i8* %0, i16 %add.i.i) #3 |
|
%tobool.i.i = icmp eq i8* %call.i.i, null |
|
br i1 %tobool.i.i, label %if.then, label %if.then.3.i |
|
|
|
if.then.3.i: ; preds = %if.end.i |
|
store i8* %call.i.i, i8** %buffer.i, align 2, !tbaa !1 |
|
%capacity.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 %length, i16* %capacity.i.i, align 2, !tbaa !7 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%2 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp4.i = icmp eq i16 %2, 0 |
|
br i1 %cmp4.i, label %if.then.5.i, label %if.end |
|
|
|
if.then.5.i: ; preds = %if.then.3.i |
|
store i8 0, i8* %call.i.i, align 1, !tbaa !9 |
|
br label %if.end |
|
|
|
if.then: ; preds = %if.end.i |
|
%3 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i.5 = icmp eq i8* %3, null |
|
br i1 %tobool.i.5, label %_ZN6String10invalidateEv.exit, label %if.then.i |
|
|
|
if.then.i: ; preds = %if.then |
|
tail call void @free(i8* %3) #3 |
|
br label %_ZN6String10invalidateEv.exit |
|
|
|
_ZN6String10invalidateEv.exit: ; preds = %if.then, %if.then.i |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%len.i.6 = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
store i16 0, i16* %len.i.6, align 2, !tbaa !8 |
|
%capacity.i.7 = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 0, i16* %capacity.i.7, align 2, !tbaa !7 |
|
br label %return |
|
|
|
if.end: ; preds = %land.lhs.true.i.if.end_crit_edge, %if.then.5.i, %if.then.3.i |
|
%len.pre-phi = phi i16* [ %.pre, %land.lhs.true.i.if.end_crit_edge ], [ %len.i, %if.then.5.i ], [ %len.i, %if.then.3.i ] |
|
%4 = phi i8* [ %0, %land.lhs.true.i.if.end_crit_edge ], [ %call.i.i, %if.then.5.i ], [ %call.i.i, %if.then.3.i ] |
|
store i16 %length, i16* %len.pre-phi, align 2, !tbaa !8 |
|
%5 = bitcast %class.__FlashStringHelper* %pstr to i8* |
|
%call2 = tail call i8* @strcpy_P(i8* %4, i8* %5) |
|
br label %return |
|
|
|
return: ; preds = %if.end, %_ZN6String10invalidateEv.exit |
|
ret %class.String* %this |
|
} |
|
|
|
declare i8* @strcpy_P(i8*, i8*) #2 |
|
|
|
; Function Attrs: nounwind |
|
define zeroext i8 @_ZN6String6concatERKS_(%class.String* nocapture %this, %class.String* nocapture readonly dereferenceable(6) %s) #0 align 2 { |
|
entry: |
|
%buffer = getelementptr inbounds %class.String, %class.String* %s, i16 0, i32 0 |
|
%0 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%len = getelementptr inbounds %class.String, %class.String* %s, i16 0, i32 2 |
|
%1 = load i16, i16* %len, align 2, !tbaa !8 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%2 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%add.i = add i16 %2, %1 |
|
%tobool.i = icmp eq i8* %0, null |
|
br i1 %tobool.i, label %_ZN6String6concatEPKcj.exit, label %if.end.i |
|
|
|
if.end.i: ; preds = %entry |
|
%cmp.i = icmp eq i16 %1, 0 |
|
br i1 %cmp.i, label %_ZN6String6concatEPKcj.exit, label %if.end.3.i |
|
|
|
if.end.3.i: ; preds = %if.end.i |
|
%buffer.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%3 = load i8*, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%tobool.i.i = icmp eq i8* %3, null |
|
br i1 %tobool.i.i, label %if.end.i.i, label %land.lhs.true.i.i |
|
|
|
land.lhs.true.i.i: ; preds = %if.end.3.i |
|
%capacity.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
%4 = load i16, i16* %capacity.i.i, align 2, !tbaa !7 |
|
%cmp.i.i = icmp ult i16 %4, %add.i |
|
br i1 %cmp.i.i, label %if.end.i.i, label %if.end.6.i |
|
|
|
if.end.i.i: ; preds = %land.lhs.true.i.i, %if.end.3.i |
|
%add.i.i.i = add i16 %add.i, 1 |
|
%call.i.i.i = tail call noalias i8* @realloc(i8* %3, i16 %add.i.i.i) #3 |
|
%tobool.i.i.i = icmp eq i8* %call.i.i.i, null |
|
br i1 %tobool.i.i.i, label %_ZN6String6concatEPKcj.exit, label %if.then.3.i.i |
|
|
|
if.then.3.i.i: ; preds = %if.end.i.i |
|
store i8* %call.i.i.i, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%capacity.i.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 %add.i, i16* %capacity.i.i.i, align 2, !tbaa !7 |
|
%5 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp4.i.i = icmp eq i16 %5, 0 |
|
br i1 %cmp4.i.i, label %if.then.5.i.i, label %if.end.6.i |
|
|
|
if.then.5.i.i: ; preds = %if.then.3.i.i |
|
store i8 0, i8* %call.i.i.i, align 1, !tbaa !9 |
|
br label %if.end.6.i |
|
|
|
if.end.6.i: ; preds = %if.then.5.i.i, %if.then.3.i.i, %land.lhs.true.i.i |
|
%6 = phi i16 [ %2, %land.lhs.true.i.i ], [ 0, %if.then.5.i.i ], [ %5, %if.then.3.i.i ] |
|
%7 = phi i8* [ %3, %land.lhs.true.i.i ], [ %call.i.i.i, %if.then.5.i.i ], [ %call.i.i.i, %if.then.3.i.i ] |
|
%add.ptr.i = getelementptr inbounds i8, i8* %7, i16 %6 |
|
%call8.i = tail call i8* @strcpy(i8* %add.ptr.i, i8* %0) #3 |
|
store i16 %add.i, i16* %len.i, align 2, !tbaa !8 |
|
br label %_ZN6String6concatEPKcj.exit |
|
|
|
_ZN6String6concatEPKcj.exit: ; preds = %entry, %if.end.i, %if.end.i.i, %if.end.6.i |
|
%retval.0.i = phi i8 [ 1, %if.end.6.i ], [ 0, %entry ], [ 1, %if.end.i ], [ 0, %if.end.i.i ] |
|
ret i8 %retval.0.i |
|
} |
|
|
|
; Function Attrs: nounwind |
|
define zeroext i8 @_ZN6String6concatEPKcj(%class.String* nocapture %this, i8* readonly %cstr, i16 %length) #0 align 2 { |
|
entry: |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len, align 2, !tbaa !8 |
|
%add = add i16 %0, %length |
|
%tobool = icmp eq i8* %cstr, null |
|
br i1 %tobool, label %cleanup, label %if.end |
|
|
|
if.end: ; preds = %entry |
|
%cmp = icmp eq i16 %length, 0 |
|
br i1 %cmp, label %cleanup, label %if.end.3 |
|
|
|
if.end.3: ; preds = %if.end |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%1 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i = icmp eq i8* %1, null |
|
br i1 %tobool.i, label %if.end.i, label %land.lhs.true.i |
|
|
|
land.lhs.true.i: ; preds = %if.end.3 |
|
%capacity.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
%2 = load i16, i16* %capacity.i, align 2, !tbaa !7 |
|
%cmp.i = icmp ult i16 %2, %add |
|
br i1 %cmp.i, label %if.end.i, label %if.end.6 |
|
|
|
if.end.i: ; preds = %land.lhs.true.i, %if.end.3 |
|
%add.i.i = add i16 %add, 1 |
|
%call.i.i = tail call noalias i8* @realloc(i8* %1, i16 %add.i.i) #3 |
|
%tobool.i.i = icmp eq i8* %call.i.i, null |
|
br i1 %tobool.i.i, label %cleanup, label %if.then.3.i |
|
|
|
if.then.3.i: ; preds = %if.end.i |
|
store i8* %call.i.i, i8** %buffer.i, align 2, !tbaa !1 |
|
%capacity.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 %add, i16* %capacity.i.i, align 2, !tbaa !7 |
|
%3 = load i16, i16* %len, align 2, !tbaa !8 |
|
%cmp4.i = icmp eq i16 %3, 0 |
|
br i1 %cmp4.i, label %if.then.5.i, label %if.end.6 |
|
|
|
if.then.5.i: ; preds = %if.then.3.i |
|
store i8 0, i8* %call.i.i, align 1, !tbaa !9 |
|
br label %if.end.6 |
|
|
|
if.end.6: ; preds = %land.lhs.true.i, %if.then.5.i, %if.then.3.i |
|
%4 = phi i16 [ %0, %land.lhs.true.i ], [ 0, %if.then.5.i ], [ %3, %if.then.3.i ] |
|
%5 = phi i8* [ %1, %land.lhs.true.i ], [ %call.i.i, %if.then.5.i ], [ %call.i.i, %if.then.3.i ] |
|
%add.ptr = getelementptr inbounds i8, i8* %5, i16 %4 |
|
%call8 = tail call i8* @strcpy(i8* %add.ptr, i8* %cstr) |
|
store i16 %add, i16* %len, align 2, !tbaa !8 |
|
br label %cleanup |
|
|
|
cleanup: ; preds = %if.end.i, %if.end, %entry, %if.end.6 |
|
%retval.0 = phi i8 [ 1, %if.end.6 ], [ 0, %entry ], [ 1, %if.end ], [ 0, %if.end.i ] |
|
ret i8 %retval.0 |
|
} |
|
|
|
; Function Attrs: nounwind |
|
define zeroext i8 @_ZN6String6concatEPKc(%class.String* nocapture %this, i8* readonly %cstr) #0 align 2 { |
|
entry: |
|
%tobool = icmp eq i8* %cstr, null |
|
br i1 %tobool, label %return, label %if.end.i |
|
|
|
if.end.i: ; preds = %entry |
|
%call = tail call i16 @strlen(i8* %cstr) #5 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%add.i = add i16 %0, %call |
|
%cmp.i = icmp eq i16 %call, 0 |
|
br i1 %cmp.i, label %return, label %if.end.3.i |
|
|
|
if.end.3.i: ; preds = %if.end.i |
|
%buffer.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%1 = load i8*, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%tobool.i.i = icmp eq i8* %1, null |
|
br i1 %tobool.i.i, label %if.end.i.i, label %land.lhs.true.i.i |
|
|
|
land.lhs.true.i.i: ; preds = %if.end.3.i |
|
%capacity.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
%2 = load i16, i16* %capacity.i.i, align 2, !tbaa !7 |
|
%cmp.i.i = icmp ult i16 %2, %add.i |
|
br i1 %cmp.i.i, label %if.end.i.i, label %if.end.6.i |
|
|
|
if.end.i.i: ; preds = %land.lhs.true.i.i, %if.end.3.i |
|
%add.i.i.i = add i16 %add.i, 1 |
|
%call.i.i.i = tail call noalias i8* @realloc(i8* %1, i16 %add.i.i.i) #3 |
|
%tobool.i.i.i = icmp eq i8* %call.i.i.i, null |
|
br i1 %tobool.i.i.i, label %return, label %if.then.3.i.i |
|
|
|
if.then.3.i.i: ; preds = %if.end.i.i |
|
store i8* %call.i.i.i, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%capacity.i.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 %add.i, i16* %capacity.i.i.i, align 2, !tbaa !7 |
|
%3 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp4.i.i = icmp eq i16 %3, 0 |
|
br i1 %cmp4.i.i, label %if.then.5.i.i, label %if.end.6.i |
|
|
|
if.then.5.i.i: ; preds = %if.then.3.i.i |
|
store i8 0, i8* %call.i.i.i, align 1, !tbaa !9 |
|
br label %if.end.6.i |
|
|
|
if.end.6.i: ; preds = %if.then.5.i.i, %if.then.3.i.i, %land.lhs.true.i.i |
|
%4 = phi i16 [ %0, %land.lhs.true.i.i ], [ 0, %if.then.5.i.i ], [ %3, %if.then.3.i.i ] |
|
%5 = phi i8* [ %1, %land.lhs.true.i.i ], [ %call.i.i.i, %if.then.5.i.i ], [ %call.i.i.i, %if.then.3.i.i ] |
|
%add.ptr.i = getelementptr inbounds i8, i8* %5, i16 %4 |
|
%call8.i = tail call i8* @strcpy(i8* %add.ptr.i, i8* %cstr) #3 |
|
store i16 %add.i, i16* %len.i, align 2, !tbaa !8 |
|
br label %return |
|
|
|
return: ; preds = %if.end.6.i, %if.end.i.i, %if.end.i, %entry |
|
%retval.0 = phi i8 [ 0, %entry ], [ 1, %if.end.6.i ], [ 1, %if.end.i ], [ 0, %if.end.i.i ] |
|
ret i8 %retval.0 |
|
} |
|
|
|
; Function Attrs: nounwind |
|
define zeroext i8 @_ZN6String6concatEc(%class.String* nocapture %this, i8 signext %c) #0 align 2 { |
|
entry: |
|
%buf = alloca [2 x i8], align 1 |
|
%0 = getelementptr inbounds [2 x i8], [2 x i8]* %buf, i16 0, i16 0 |
|
call void @llvm.lifetime.start(i64 2, i8* %0) #3 |
|
store i8 %c, i8* %0, align 1, !tbaa !9 |
|
%arrayidx2 = getelementptr inbounds [2 x i8], [2 x i8]* %buf, i16 0, i16 1 |
|
store i8 0, i8* %arrayidx2, align 1, !tbaa !9 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%1 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%add.i = add i16 %1, 1 |
|
%buffer.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%2 = load i8*, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%tobool.i.i = icmp eq i8* %2, null |
|
br i1 %tobool.i.i, label %if.end.i.i, label %land.lhs.true.i.i |
|
|
|
land.lhs.true.i.i: ; preds = %entry |
|
%capacity.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
%3 = load i16, i16* %capacity.i.i, align 2, !tbaa !7 |
|
%cmp.i.i = icmp ult i16 %3, %add.i |
|
br i1 %cmp.i.i, label %if.end.i.i, label %if.end.6.i |
|
|
|
if.end.i.i: ; preds = %land.lhs.true.i.i, %entry |
|
%add.i.i.i = add i16 %1, 2 |
|
%call.i.i.i = tail call noalias i8* @realloc(i8* %2, i16 %add.i.i.i) #3 |
|
%tobool.i.i.i = icmp eq i8* %call.i.i.i, null |
|
br i1 %tobool.i.i.i, label %_ZN6String6concatEPKcj.exit, label %if.then.3.i.i |
|
|
|
if.then.3.i.i: ; preds = %if.end.i.i |
|
store i8* %call.i.i.i, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%capacity.i.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 %add.i, i16* %capacity.i.i.i, align 2, !tbaa !7 |
|
%4 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp4.i.i = icmp eq i16 %4, 0 |
|
br i1 %cmp4.i.i, label %if.then.5.i.i, label %if.end.6.i |
|
|
|
if.then.5.i.i: ; preds = %if.then.3.i.i |
|
store i8 0, i8* %call.i.i.i, align 1, !tbaa !9 |
|
br label %if.end.6.i |
|
|
|
if.end.6.i: ; preds = %if.then.5.i.i, %if.then.3.i.i, %land.lhs.true.i.i |
|
%5 = phi i16 [ %1, %land.lhs.true.i.i ], [ 0, %if.then.5.i.i ], [ %4, %if.then.3.i.i ] |
|
%6 = phi i8* [ %2, %land.lhs.true.i.i ], [ %call.i.i.i, %if.then.5.i.i ], [ %call.i.i.i, %if.then.3.i.i ] |
|
%add.ptr.i = getelementptr inbounds i8, i8* %6, i16 %5 |
|
%call8.i = call i8* @strcpy(i8* %add.ptr.i, i8* %0) #3 |
|
store i16 %add.i, i16* %len.i, align 2, !tbaa !8 |
|
br label %_ZN6String6concatEPKcj.exit |
|
|
|
_ZN6String6concatEPKcj.exit: ; preds = %if.end.i.i, %if.end.6.i |
|
%retval.0.i = phi i8 [ 1, %if.end.6.i ], [ 0, %if.end.i.i ] |
|
call void @llvm.lifetime.end(i64 2, i8* %0) #3 |
|
ret i8 %retval.0.i |
|
} |
|
|
|
define zeroext i8 @_ZN6String6concatEh(%class.String* nocapture %this, i8 zeroext %num) #2 align 2 { |
|
entry: |
|
%buf = alloca [4 x i8], align 1 |
|
%0 = getelementptr inbounds [4 x i8], [4 x i8]* %buf, i16 0, i16 0 |
|
call void @llvm.lifetime.start(i64 4, i8* %0) #3 |
|
%conv = zext i8 %num to i16 |
|
%call.i = call i8* @__itoa(i16 %conv, i8* %0, i16 10) |
|
%call4 = call i16 @strlen(i8* %0) #5 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%1 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%add.i = add i16 %1, %call4 |
|
%cmp.i = icmp eq i16 %call4, 0 |
|
br i1 %cmp.i, label %_ZN6String6concatEPKcj.exit, label %if.end.3.i |
|
|
|
if.end.3.i: ; preds = %entry |
|
%buffer.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%2 = load i8*, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%tobool.i.i = icmp eq i8* %2, null |
|
br i1 %tobool.i.i, label %if.end.i.i, label %land.lhs.true.i.i |
|
|
|
land.lhs.true.i.i: ; preds = %if.end.3.i |
|
%capacity.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
%3 = load i16, i16* %capacity.i.i, align 2, !tbaa !7 |
|
%cmp.i.i = icmp ult i16 %3, %add.i |
|
br i1 %cmp.i.i, label %if.end.i.i, label %if.end.6.i |
|
|
|
if.end.i.i: ; preds = %land.lhs.true.i.i, %if.end.3.i |
|
%add.i.i.i = add i16 %add.i, 1 |
|
%call.i.i.i = call noalias i8* @realloc(i8* %2, i16 %add.i.i.i) #3 |
|
%tobool.i.i.i = icmp eq i8* %call.i.i.i, null |
|
br i1 %tobool.i.i.i, label %_ZN6String6concatEPKcj.exit, label %if.then.3.i.i |
|
|
|
if.then.3.i.i: ; preds = %if.end.i.i |
|
store i8* %call.i.i.i, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%capacity.i.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 %add.i, i16* %capacity.i.i.i, align 2, !tbaa !7 |
|
%4 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp4.i.i = icmp eq i16 %4, 0 |
|
br i1 %cmp4.i.i, label %if.then.5.i.i, label %if.end.6.i |
|
|
|
if.then.5.i.i: ; preds = %if.then.3.i.i |
|
store i8 0, i8* %call.i.i.i, align 1, !tbaa !9 |
|
br label %if.end.6.i |
|
|
|
if.end.6.i: ; preds = %if.then.5.i.i, %if.then.3.i.i, %land.lhs.true.i.i |
|
%5 = phi i16 [ %1, %land.lhs.true.i.i ], [ 0, %if.then.5.i.i ], [ %4, %if.then.3.i.i ] |
|
%6 = phi i8* [ %2, %land.lhs.true.i.i ], [ %call.i.i.i, %if.then.5.i.i ], [ %call.i.i.i, %if.then.3.i.i ] |
|
%add.ptr.i = getelementptr inbounds i8, i8* %6, i16 %5 |
|
%call8.i = call i8* @strcpy(i8* %add.ptr.i, i8* %0) #3 |
|
store i16 %add.i, i16* %len.i, align 2, !tbaa !8 |
|
br label %_ZN6String6concatEPKcj.exit |
|
|
|
_ZN6String6concatEPKcj.exit: ; preds = %entry, %if.end.i.i, %if.end.6.i |
|
%retval.0.i = phi i8 [ 1, %if.end.6.i ], [ 1, %entry ], [ 0, %if.end.i.i ] |
|
call void @llvm.lifetime.end(i64 4, i8* %0) #3 |
|
ret i8 %retval.0.i |
|
} |
|
|
|
define zeroext i8 @_ZN6String6concatEi(%class.String* nocapture %this, i16 %num) #2 align 2 { |
|
entry: |
|
%buf = alloca [8 x i8], align 1 |
|
%0 = getelementptr inbounds [8 x i8], [8 x i8]* %buf, i16 0, i16 0 |
|
call void @llvm.lifetime.start(i64 8, i8* %0) #3 |
|
%call.i = call i8* @__itoa(i16 %num, i8* %0, i16 10) |
|
%call4 = call i16 @strlen(i8* %0) #5 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%1 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%add.i = add i16 %1, %call4 |
|
%cmp.i = icmp eq i16 %call4, 0 |
|
br i1 %cmp.i, label %_ZN6String6concatEPKcj.exit, label %if.end.3.i |
|
|
|
if.end.3.i: ; preds = %entry |
|
%buffer.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%2 = load i8*, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%tobool.i.i = icmp eq i8* %2, null |
|
br i1 %tobool.i.i, label %if.end.i.i, label %land.lhs.true.i.i |
|
|
|
land.lhs.true.i.i: ; preds = %if.end.3.i |
|
%capacity.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
%3 = load i16, i16* %capacity.i.i, align 2, !tbaa !7 |
|
%cmp.i.i = icmp ult i16 %3, %add.i |
|
br i1 %cmp.i.i, label %if.end.i.i, label %if.end.6.i |
|
|
|
if.end.i.i: ; preds = %land.lhs.true.i.i, %if.end.3.i |
|
%add.i.i.i = add i16 %add.i, 1 |
|
%call.i.i.i = call noalias i8* @realloc(i8* %2, i16 %add.i.i.i) #3 |
|
%tobool.i.i.i = icmp eq i8* %call.i.i.i, null |
|
br i1 %tobool.i.i.i, label %_ZN6String6concatEPKcj.exit, label %if.then.3.i.i |
|
|
|
if.then.3.i.i: ; preds = %if.end.i.i |
|
store i8* %call.i.i.i, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%capacity.i.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 %add.i, i16* %capacity.i.i.i, align 2, !tbaa !7 |
|
%4 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp4.i.i = icmp eq i16 %4, 0 |
|
br i1 %cmp4.i.i, label %if.then.5.i.i, label %if.end.6.i |
|
|
|
if.then.5.i.i: ; preds = %if.then.3.i.i |
|
store i8 0, i8* %call.i.i.i, align 1, !tbaa !9 |
|
br label %if.end.6.i |
|
|
|
if.end.6.i: ; preds = %if.then.5.i.i, %if.then.3.i.i, %land.lhs.true.i.i |
|
%5 = phi i16 [ %1, %land.lhs.true.i.i ], [ 0, %if.then.5.i.i ], [ %4, %if.then.3.i.i ] |
|
%6 = phi i8* [ %2, %land.lhs.true.i.i ], [ %call.i.i.i, %if.then.5.i.i ], [ %call.i.i.i, %if.then.3.i.i ] |
|
%add.ptr.i = getelementptr inbounds i8, i8* %6, i16 %5 |
|
%call8.i = call i8* @strcpy(i8* %add.ptr.i, i8* %0) #3 |
|
store i16 %add.i, i16* %len.i, align 2, !tbaa !8 |
|
br label %_ZN6String6concatEPKcj.exit |
|
|
|
_ZN6String6concatEPKcj.exit: ; preds = %entry, %if.end.i.i, %if.end.6.i |
|
%retval.0.i = phi i8 [ 1, %if.end.6.i ], [ 1, %entry ], [ 0, %if.end.i.i ] |
|
call void @llvm.lifetime.end(i64 8, i8* %0) #3 |
|
ret i8 %retval.0.i |
|
} |
|
|
|
define zeroext i8 @_ZN6String6concatEj(%class.String* nocapture %this, i16 %num) #2 align 2 { |
|
entry: |
|
%buf = alloca [7 x i8], align 1 |
|
%0 = getelementptr inbounds [7 x i8], [7 x i8]* %buf, i16 0, i16 0 |
|
call void @llvm.lifetime.start(i64 7, i8* %0) #3 |
|
%call.i = call i8* @__utoa(i16 %num, i8* %0, i16 10) |
|
%call4 = call i16 @strlen(i8* %0) #5 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%1 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%add.i = add i16 %1, %call4 |
|
%cmp.i = icmp eq i16 %call4, 0 |
|
br i1 %cmp.i, label %_ZN6String6concatEPKcj.exit, label %if.end.3.i |
|
|
|
if.end.3.i: ; preds = %entry |
|
%buffer.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%2 = load i8*, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%tobool.i.i = icmp eq i8* %2, null |
|
br i1 %tobool.i.i, label %if.end.i.i, label %land.lhs.true.i.i |
|
|
|
land.lhs.true.i.i: ; preds = %if.end.3.i |
|
%capacity.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
%3 = load i16, i16* %capacity.i.i, align 2, !tbaa !7 |
|
%cmp.i.i = icmp ult i16 %3, %add.i |
|
br i1 %cmp.i.i, label %if.end.i.i, label %if.end.6.i |
|
|
|
if.end.i.i: ; preds = %land.lhs.true.i.i, %if.end.3.i |
|
%add.i.i.i = add i16 %add.i, 1 |
|
%call.i.i.i = call noalias i8* @realloc(i8* %2, i16 %add.i.i.i) #3 |
|
%tobool.i.i.i = icmp eq i8* %call.i.i.i, null |
|
br i1 %tobool.i.i.i, label %_ZN6String6concatEPKcj.exit, label %if.then.3.i.i |
|
|
|
if.then.3.i.i: ; preds = %if.end.i.i |
|
store i8* %call.i.i.i, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%capacity.i.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 %add.i, i16* %capacity.i.i.i, align 2, !tbaa !7 |
|
%4 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp4.i.i = icmp eq i16 %4, 0 |
|
br i1 %cmp4.i.i, label %if.then.5.i.i, label %if.end.6.i |
|
|
|
if.then.5.i.i: ; preds = %if.then.3.i.i |
|
store i8 0, i8* %call.i.i.i, align 1, !tbaa !9 |
|
br label %if.end.6.i |
|
|
|
if.end.6.i: ; preds = %if.then.5.i.i, %if.then.3.i.i, %land.lhs.true.i.i |
|
%5 = phi i16 [ %1, %land.lhs.true.i.i ], [ 0, %if.then.5.i.i ], [ %4, %if.then.3.i.i ] |
|
%6 = phi i8* [ %2, %land.lhs.true.i.i ], [ %call.i.i.i, %if.then.5.i.i ], [ %call.i.i.i, %if.then.3.i.i ] |
|
%add.ptr.i = getelementptr inbounds i8, i8* %6, i16 %5 |
|
%call8.i = call i8* @strcpy(i8* %add.ptr.i, i8* %0) #3 |
|
store i16 %add.i, i16* %len.i, align 2, !tbaa !8 |
|
br label %_ZN6String6concatEPKcj.exit |
|
|
|
_ZN6String6concatEPKcj.exit: ; preds = %entry, %if.end.i.i, %if.end.6.i |
|
%retval.0.i = phi i8 [ 1, %if.end.6.i ], [ 1, %entry ], [ 0, %if.end.i.i ] |
|
call void @llvm.lifetime.end(i64 7, i8* %0) #3 |
|
ret i8 %retval.0.i |
|
} |
|
|
|
define zeroext i8 @_ZN6String6concatEl(%class.String* nocapture %this, i32 %num) #2 align 2 { |
|
entry: |
|
%buf = alloca [14 x i8], align 1 |
|
%0 = getelementptr inbounds [14 x i8], [14 x i8]* %buf, i16 0, i16 0 |
|
call void @llvm.lifetime.start(i64 14, i8* %0) #3 |
|
%call.i = call i8* @__ltoa(i32 %num, i8* %0, i16 10) |
|
%call4 = call i16 @strlen(i8* %0) #5 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%1 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%add.i = add i16 %1, %call4 |
|
%cmp.i = icmp eq i16 %call4, 0 |
|
br i1 %cmp.i, label %_ZN6String6concatEPKcj.exit, label %if.end.3.i |
|
|
|
if.end.3.i: ; preds = %entry |
|
%buffer.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%2 = load i8*, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%tobool.i.i = icmp eq i8* %2, null |
|
br i1 %tobool.i.i, label %if.end.i.i, label %land.lhs.true.i.i |
|
|
|
land.lhs.true.i.i: ; preds = %if.end.3.i |
|
%capacity.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
%3 = load i16, i16* %capacity.i.i, align 2, !tbaa !7 |
|
%cmp.i.i = icmp ult i16 %3, %add.i |
|
br i1 %cmp.i.i, label %if.end.i.i, label %if.end.6.i |
|
|
|
if.end.i.i: ; preds = %land.lhs.true.i.i, %if.end.3.i |
|
%add.i.i.i = add i16 %add.i, 1 |
|
%call.i.i.i = call noalias i8* @realloc(i8* %2, i16 %add.i.i.i) #3 |
|
%tobool.i.i.i = icmp eq i8* %call.i.i.i, null |
|
br i1 %tobool.i.i.i, label %_ZN6String6concatEPKcj.exit, label %if.then.3.i.i |
|
|
|
if.then.3.i.i: ; preds = %if.end.i.i |
|
store i8* %call.i.i.i, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%capacity.i.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 %add.i, i16* %capacity.i.i.i, align 2, !tbaa !7 |
|
%4 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp4.i.i = icmp eq i16 %4, 0 |
|
br i1 %cmp4.i.i, label %if.then.5.i.i, label %if.end.6.i |
|
|
|
if.then.5.i.i: ; preds = %if.then.3.i.i |
|
store i8 0, i8* %call.i.i.i, align 1, !tbaa !9 |
|
br label %if.end.6.i |
|
|
|
if.end.6.i: ; preds = %if.then.5.i.i, %if.then.3.i.i, %land.lhs.true.i.i |
|
%5 = phi i16 [ %1, %land.lhs.true.i.i ], [ 0, %if.then.5.i.i ], [ %4, %if.then.3.i.i ] |
|
%6 = phi i8* [ %2, %land.lhs.true.i.i ], [ %call.i.i.i, %if.then.5.i.i ], [ %call.i.i.i, %if.then.3.i.i ] |
|
%add.ptr.i = getelementptr inbounds i8, i8* %6, i16 %5 |
|
%call8.i = call i8* @strcpy(i8* %add.ptr.i, i8* %0) #3 |
|
store i16 %add.i, i16* %len.i, align 2, !tbaa !8 |
|
br label %_ZN6String6concatEPKcj.exit |
|
|
|
_ZN6String6concatEPKcj.exit: ; preds = %entry, %if.end.i.i, %if.end.6.i |
|
%retval.0.i = phi i8 [ 1, %if.end.6.i ], [ 1, %entry ], [ 0, %if.end.i.i ] |
|
call void @llvm.lifetime.end(i64 14, i8* %0) #3 |
|
ret i8 %retval.0.i |
|
} |
|
|
|
define zeroext i8 @_ZN6String6concatEm(%class.String* nocapture %this, i32 %num) #2 align 2 { |
|
entry: |
|
%buf = alloca [13 x i8], align 1 |
|
%0 = getelementptr inbounds [13 x i8], [13 x i8]* %buf, i16 0, i16 0 |
|
call void @llvm.lifetime.start(i64 13, i8* %0) #3 |
|
%call.i = call i8* @__ultoa(i32 %num, i8* %0, i16 10) |
|
%call4 = call i16 @strlen(i8* %0) #5 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%1 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%add.i = add i16 %1, %call4 |
|
%cmp.i = icmp eq i16 %call4, 0 |
|
br i1 %cmp.i, label %_ZN6String6concatEPKcj.exit, label %if.end.3.i |
|
|
|
if.end.3.i: ; preds = %entry |
|
%buffer.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%2 = load i8*, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%tobool.i.i = icmp eq i8* %2, null |
|
br i1 %tobool.i.i, label %if.end.i.i, label %land.lhs.true.i.i |
|
|
|
land.lhs.true.i.i: ; preds = %if.end.3.i |
|
%capacity.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
%3 = load i16, i16* %capacity.i.i, align 2, !tbaa !7 |
|
%cmp.i.i = icmp ult i16 %3, %add.i |
|
br i1 %cmp.i.i, label %if.end.i.i, label %if.end.6.i |
|
|
|
if.end.i.i: ; preds = %land.lhs.true.i.i, %if.end.3.i |
|
%add.i.i.i = add i16 %add.i, 1 |
|
%call.i.i.i = call noalias i8* @realloc(i8* %2, i16 %add.i.i.i) #3 |
|
%tobool.i.i.i = icmp eq i8* %call.i.i.i, null |
|
br i1 %tobool.i.i.i, label %_ZN6String6concatEPKcj.exit, label %if.then.3.i.i |
|
|
|
if.then.3.i.i: ; preds = %if.end.i.i |
|
store i8* %call.i.i.i, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%capacity.i.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 %add.i, i16* %capacity.i.i.i, align 2, !tbaa !7 |
|
%4 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp4.i.i = icmp eq i16 %4, 0 |
|
br i1 %cmp4.i.i, label %if.then.5.i.i, label %if.end.6.i |
|
|
|
if.then.5.i.i: ; preds = %if.then.3.i.i |
|
store i8 0, i8* %call.i.i.i, align 1, !tbaa !9 |
|
br label %if.end.6.i |
|
|
|
if.end.6.i: ; preds = %if.then.5.i.i, %if.then.3.i.i, %land.lhs.true.i.i |
|
%5 = phi i16 [ %1, %land.lhs.true.i.i ], [ 0, %if.then.5.i.i ], [ %4, %if.then.3.i.i ] |
|
%6 = phi i8* [ %2, %land.lhs.true.i.i ], [ %call.i.i.i, %if.then.5.i.i ], [ %call.i.i.i, %if.then.3.i.i ] |
|
%add.ptr.i = getelementptr inbounds i8, i8* %6, i16 %5 |
|
%call8.i = call i8* @strcpy(i8* %add.ptr.i, i8* %0) #3 |
|
store i16 %add.i, i16* %len.i, align 2, !tbaa !8 |
|
br label %_ZN6String6concatEPKcj.exit |
|
|
|
_ZN6String6concatEPKcj.exit: ; preds = %entry, %if.end.i.i, %if.end.6.i |
|
%retval.0.i = phi i8 [ 1, %if.end.6.i ], [ 1, %entry ], [ 0, %if.end.i.i ] |
|
call void @llvm.lifetime.end(i64 13, i8* %0) #3 |
|
ret i8 %retval.0.i |
|
} |
|
|
|
define zeroext i8 @_ZN6String6concatEf(%class.String* nocapture %this, float %num) #2 align 2 { |
|
entry: |
|
%buf = alloca [20 x i8], align 1 |
|
%0 = getelementptr inbounds [20 x i8], [20 x i8]* %buf, i16 0, i16 0 |
|
call void @llvm.lifetime.start(i64 20, i8* %0) #3 |
|
%conv = fpext float %num to double |
|
%call = call i8* @dtostrf(double %conv, i8 signext 4, i8 zeroext 2, i8* %0) |
|
%call2 = call i16 @strlen(i8* %call) #5 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%1 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%add.i = add i16 %1, %call2 |
|
%tobool.i = icmp eq i8* %call, null |
|
br i1 %tobool.i, label %_ZN6String6concatEPKcj.exit, label %if.end.i |
|
|
|
if.end.i: ; preds = %entry |
|
%cmp.i = icmp eq i16 %call2, 0 |
|
br i1 %cmp.i, label %_ZN6String6concatEPKcj.exit, label %if.end.3.i |
|
|
|
if.end.3.i: ; preds = %if.end.i |
|
%buffer.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%2 = load i8*, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%tobool.i.i = icmp eq i8* %2, null |
|
br i1 %tobool.i.i, label %if.end.i.i, label %land.lhs.true.i.i |
|
|
|
land.lhs.true.i.i: ; preds = %if.end.3.i |
|
%capacity.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
%3 = load i16, i16* %capacity.i.i, align 2, !tbaa !7 |
|
%cmp.i.i = icmp ult i16 %3, %add.i |
|
br i1 %cmp.i.i, label %if.end.i.i, label %if.end.6.i |
|
|
|
if.end.i.i: ; preds = %land.lhs.true.i.i, %if.end.3.i |
|
%add.i.i.i = add i16 %add.i, 1 |
|
%call.i.i.i = call noalias i8* @realloc(i8* %2, i16 %add.i.i.i) #3 |
|
%tobool.i.i.i = icmp eq i8* %call.i.i.i, null |
|
br i1 %tobool.i.i.i, label %_ZN6String6concatEPKcj.exit, label %if.then.3.i.i |
|
|
|
if.then.3.i.i: ; preds = %if.end.i.i |
|
store i8* %call.i.i.i, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%capacity.i.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 %add.i, i16* %capacity.i.i.i, align 2, !tbaa !7 |
|
%4 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp4.i.i = icmp eq i16 %4, 0 |
|
br i1 %cmp4.i.i, label %if.then.5.i.i, label %if.end.6.i |
|
|
|
if.then.5.i.i: ; preds = %if.then.3.i.i |
|
store i8 0, i8* %call.i.i.i, align 1, !tbaa !9 |
|
br label %if.end.6.i |
|
|
|
if.end.6.i: ; preds = %if.then.5.i.i, %if.then.3.i.i, %land.lhs.true.i.i |
|
%5 = phi i16 [ %1, %land.lhs.true.i.i ], [ 0, %if.then.5.i.i ], [ %4, %if.then.3.i.i ] |
|
%6 = phi i8* [ %2, %land.lhs.true.i.i ], [ %call.i.i.i, %if.then.5.i.i ], [ %call.i.i.i, %if.then.3.i.i ] |
|
%add.ptr.i = getelementptr inbounds i8, i8* %6, i16 %5 |
|
%call8.i = call i8* @strcpy(i8* %add.ptr.i, i8* %call) #3 |
|
store i16 %add.i, i16* %len.i, align 2, !tbaa !8 |
|
br label %_ZN6String6concatEPKcj.exit |
|
|
|
_ZN6String6concatEPKcj.exit: ; preds = %entry, %if.end.i, %if.end.i.i, %if.end.6.i |
|
%retval.0.i = phi i8 [ 1, %if.end.6.i ], [ 0, %entry ], [ 1, %if.end.i ], [ 0, %if.end.i.i ] |
|
call void @llvm.lifetime.end(i64 20, i8* %0) #3 |
|
ret i8 %retval.0.i |
|
} |
|
|
|
define zeroext i8 @_ZN6String6concatEd(%class.String* nocapture %this, double %num) #2 align 2 { |
|
entry: |
|
%buf = alloca [20 x i8], align 1 |
|
%0 = getelementptr inbounds [20 x i8], [20 x i8]* %buf, i16 0, i16 0 |
|
call void @llvm.lifetime.start(i64 20, i8* %0) #3 |
|
%call = call i8* @dtostrf(double %num, i8 signext 4, i8 zeroext 2, i8* %0) |
|
%call2 = call i16 @strlen(i8* %call) #5 |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%1 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%add.i = add i16 %1, %call2 |
|
%tobool.i = icmp eq i8* %call, null |
|
br i1 %tobool.i, label %_ZN6String6concatEPKcj.exit, label %if.end.i |
|
|
|
if.end.i: ; preds = %entry |
|
%cmp.i = icmp eq i16 %call2, 0 |
|
br i1 %cmp.i, label %_ZN6String6concatEPKcj.exit, label %if.end.3.i |
|
|
|
if.end.3.i: ; preds = %if.end.i |
|
%buffer.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%2 = load i8*, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%tobool.i.i = icmp eq i8* %2, null |
|
br i1 %tobool.i.i, label %if.end.i.i, label %land.lhs.true.i.i |
|
|
|
land.lhs.true.i.i: ; preds = %if.end.3.i |
|
%capacity.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
%3 = load i16, i16* %capacity.i.i, align 2, !tbaa !7 |
|
%cmp.i.i = icmp ult i16 %3, %add.i |
|
br i1 %cmp.i.i, label %if.end.i.i, label %if.end.6.i |
|
|
|
if.end.i.i: ; preds = %land.lhs.true.i.i, %if.end.3.i |
|
%add.i.i.i = add i16 %add.i, 1 |
|
%call.i.i.i = call noalias i8* @realloc(i8* %2, i16 %add.i.i.i) #3 |
|
%tobool.i.i.i = icmp eq i8* %call.i.i.i, null |
|
br i1 %tobool.i.i.i, label %_ZN6String6concatEPKcj.exit, label %if.then.3.i.i |
|
|
|
if.then.3.i.i: ; preds = %if.end.i.i |
|
store i8* %call.i.i.i, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%capacity.i.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 %add.i, i16* %capacity.i.i.i, align 2, !tbaa !7 |
|
%4 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp4.i.i = icmp eq i16 %4, 0 |
|
br i1 %cmp4.i.i, label %if.then.5.i.i, label %if.end.6.i |
|
|
|
if.then.5.i.i: ; preds = %if.then.3.i.i |
|
store i8 0, i8* %call.i.i.i, align 1, !tbaa !9 |
|
br label %if.end.6.i |
|
|
|
if.end.6.i: ; preds = %if.then.5.i.i, %if.then.3.i.i, %land.lhs.true.i.i |
|
%5 = phi i16 [ %1, %land.lhs.true.i.i ], [ 0, %if.then.5.i.i ], [ %4, %if.then.3.i.i ] |
|
%6 = phi i8* [ %2, %land.lhs.true.i.i ], [ %call.i.i.i, %if.then.5.i.i ], [ %call.i.i.i, %if.then.3.i.i ] |
|
%add.ptr.i = getelementptr inbounds i8, i8* %6, i16 %5 |
|
%call8.i = call i8* @strcpy(i8* %add.ptr.i, i8* %call) #3 |
|
store i16 %add.i, i16* %len.i, align 2, !tbaa !8 |
|
br label %_ZN6String6concatEPKcj.exit |
|
|
|
_ZN6String6concatEPKcj.exit: ; preds = %entry, %if.end.i, %if.end.i.i, %if.end.6.i |
|
%retval.0.i = phi i8 [ 1, %if.end.6.i ], [ 0, %entry ], [ 1, %if.end.i ], [ 0, %if.end.i.i ] |
|
call void @llvm.lifetime.end(i64 20, i8* %0) #3 |
|
ret i8 %retval.0.i |
|
} |
|
|
|
define zeroext i8 @_ZN6String6concatEPK19__FlashStringHelper(%class.String* nocapture %this, %class.__FlashStringHelper* %str) #2 align 2 { |
|
entry: |
|
%tobool = icmp eq %class.__FlashStringHelper* %str, null |
|
br i1 %tobool, label %return, label %if.end |
|
|
|
if.end: ; preds = %entry |
|
%0 = bitcast %class.__FlashStringHelper* %str to i8* |
|
%call.i = tail call i16 @__strlen_P(i8* %0) #6 |
|
%cmp = icmp eq i16 %call.i, 0 |
|
br i1 %cmp, label %return, label %if.end.3 |
|
|
|
if.end.3: ; preds = %if.end |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%1 = load i16, i16* %len, align 2, !tbaa !8 |
|
%add = add i16 %1, %call.i |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%2 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i = icmp eq i8* %2, null |
|
br i1 %tobool.i, label %if.end.i, label %land.lhs.true.i |
|
|
|
land.lhs.true.i: ; preds = %if.end.3 |
|
%capacity.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
%3 = load i16, i16* %capacity.i, align 2, !tbaa !7 |
|
%cmp.i = icmp ult i16 %3, %add |
|
br i1 %cmp.i, label %if.end.i, label %if.end.7 |
|
|
|
if.end.i: ; preds = %land.lhs.true.i, %if.end.3 |
|
%add.i.i = add i16 %add, 1 |
|
%call.i.i = tail call noalias i8* @realloc(i8* %2, i16 %add.i.i) #3 |
|
%tobool.i.i = icmp eq i8* %call.i.i, null |
|
br i1 %tobool.i.i, label %return, label %if.then.3.i |
|
|
|
if.then.3.i: ; preds = %if.end.i |
|
store i8* %call.i.i, i8** %buffer.i, align 2, !tbaa !1 |
|
%capacity.i.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
store i16 %add, i16* %capacity.i.i, align 2, !tbaa !7 |
|
%4 = load i16, i16* %len, align 2, !tbaa !8 |
|
%cmp4.i = icmp eq i16 %4, 0 |
|
br i1 %cmp4.i, label %if.then.5.i, label %if.end.7 |
|
|
|
if.then.5.i: ; preds = %if.then.3.i |
|
store i8 0, i8* %call.i.i, align 1, !tbaa !9 |
|
br label %if.end.7 |
|
|
|
if.end.7: ; preds = %land.lhs.true.i, %if.then.5.i, %if.then.3.i |
|
%5 = phi i16 [ %1, %land.lhs.true.i ], [ 0, %if.then.5.i ], [ %4, %if.then.3.i ] |
|
%6 = phi i8* [ %2, %land.lhs.true.i ], [ %call.i.i, %if.then.5.i ], [ %call.i.i, %if.then.3.i ] |
|
%add.ptr = getelementptr inbounds i8, i8* %6, i16 %5 |
|
%call9 = tail call i8* @strcpy_P(i8* %add.ptr, i8* %0) |
|
store i16 %add, i16* %len, align 2, !tbaa !8 |
|
br label %return |
|
|
|
return: ; preds = %if.end.i, %if.end, %if.end.7, %entry |
|
%retval.2 = phi i8 [ 0, %entry ], [ 1, %if.end ], [ 1, %if.end.7 ], [ 0, %if.end.i ] |
|
ret i8 %retval.2 |
|
} |
|
|
|
; Function Attrs: nounwind |
|
define dereferenceable(6) %class.StringSumHelper* @_ZplRK15StringSumHelperRK6String(%class.StringSumHelper* dereferenceable(6) %lhs, %class.String* nocapture readonly dereferenceable(6) %rhs) #0 { |
|
entry: |
|
%buffer = getelementptr inbounds %class.String, %class.String* %rhs, i16 0, i32 0 |
|
%0 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%len = getelementptr inbounds %class.String, %class.String* %rhs, i16 0, i32 2 |
|
%1 = load i16, i16* %len, align 2, !tbaa !8 |
|
%len.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 2 |
|
%2 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%add.i = add i16 %2, %1 |
|
%tobool.i = icmp eq i8* %0, null |
|
br i1 %tobool.i, label %entry.if.then_crit_edge, label %if.end.i |
|
|
|
entry.if.then_crit_edge: ; preds = %entry |
|
%.pre = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 0 |
|
br label %if.then |
|
|
|
if.end.i: ; preds = %entry |
|
%cmp.i = icmp eq i16 %1, 0 |
|
br i1 %cmp.i, label %if.end, label %if.end.3.i |
|
|
|
if.end.3.i: ; preds = %if.end.i |
|
%buffer.i.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 0 |
|
%3 = load i8*, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%tobool.i.i = icmp eq i8* %3, null |
|
br i1 %tobool.i.i, label %if.end.i.i, label %land.lhs.true.i.i |
|
|
|
land.lhs.true.i.i: ; preds = %if.end.3.i |
|
%capacity.i.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 1 |
|
%4 = load i16, i16* %capacity.i.i, align 2, !tbaa !7 |
|
%cmp.i.i = icmp ult i16 %4, %add.i |
|
br i1 %cmp.i.i, label %if.end.i.i, label %if.end.6.i |
|
|
|
if.end.i.i: ; preds = %land.lhs.true.i.i, %if.end.3.i |
|
%add.i.i.i = add i16 %add.i, 1 |
|
%call.i.i.i = tail call noalias i8* @realloc(i8* %3, i16 %add.i.i.i) #3 |
|
%tobool.i.i.i = icmp eq i8* %call.i.i.i, null |
|
br i1 %tobool.i.i.i, label %if.then, label %if.then.3.i.i |
|
|
|
if.then.3.i.i: ; preds = %if.end.i.i |
|
store i8* %call.i.i.i, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%capacity.i.i.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 1 |
|
store i16 %add.i, i16* %capacity.i.i.i, align 2, !tbaa !7 |
|
%5 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp4.i.i = icmp eq i16 %5, 0 |
|
br i1 %cmp4.i.i, label %if.then.5.i.i, label %if.end.6.i |
|
|
|
if.then.5.i.i: ; preds = %if.then.3.i.i |
|
store i8 0, i8* %call.i.i.i, align 1, !tbaa !9 |
|
br label %if.end.6.i |
|
|
|
if.end.6.i: ; preds = %if.then.5.i.i, %if.then.3.i.i, %land.lhs.true.i.i |
|
%6 = phi i16 [ %2, %land.lhs.true.i.i ], [ 0, %if.then.5.i.i ], [ %5, %if.then.3.i.i ] |
|
%7 = phi i8* [ %3, %land.lhs.true.i.i ], [ %call.i.i.i, %if.then.5.i.i ], [ %call.i.i.i, %if.then.3.i.i ] |
|
%add.ptr.i = getelementptr inbounds i8, i8* %7, i16 %6 |
|
%call8.i = tail call i8* @strcpy(i8* %add.ptr.i, i8* %0) #3 |
|
store i16 %add.i, i16* %len.i, align 2, !tbaa !8 |
|
br label %if.end |
|
|
|
if.then: ; preds = %entry.if.then_crit_edge, %if.end.i.i |
|
%buffer.i.pre-phi = phi i8** [ %.pre, %entry.if.then_crit_edge ], [ %buffer.i.i, %if.end.i.i ] |
|
%8 = load i8*, i8** %buffer.i.pre-phi, align 2, !tbaa !1 |
|
%tobool.i.5 = icmp eq i8* %8, null |
|
br i1 %tobool.i.5, label %_ZN6String10invalidateEv.exit, label %if.then.i |
|
|
|
if.then.i: ; preds = %if.then |
|
tail call void @free(i8* %8) #3 |
|
br label %_ZN6String10invalidateEv.exit |
|
|
|
_ZN6String10invalidateEv.exit: ; preds = %if.then, %if.then.i |
|
store i8* null, i8** %buffer.i.pre-phi, align 2, !tbaa !1 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
%capacity.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
br label %if.end |
|
|
|
if.end: ; preds = %if.end.i, %if.end.6.i, %_ZN6String10invalidateEv.exit |
|
ret %class.StringSumHelper* %lhs |
|
} |
|
|
|
; Function Attrs: nounwind |
|
define dereferenceable(6) %class.StringSumHelper* @_ZplRK15StringSumHelperPKc(%class.StringSumHelper* dereferenceable(6) %lhs, i8* readonly %cstr) #0 { |
|
entry: |
|
%tobool = icmp eq i8* %cstr, null |
|
br i1 %tobool, label %entry.if.then_crit_edge, label %if.end.i |
|
|
|
entry.if.then_crit_edge: ; preds = %entry |
|
%.pre = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 0 |
|
br label %if.then |
|
|
|
if.end.i: ; preds = %entry |
|
%call = tail call i16 @strlen(i8* %cstr) #5 |
|
%len.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 2 |
|
%0 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%add.i = add i16 %0, %call |
|
%cmp.i = icmp eq i16 %call, 0 |
|
br i1 %cmp.i, label %if.end, label %if.end.3.i |
|
|
|
if.end.3.i: ; preds = %if.end.i |
|
%buffer.i.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 0 |
|
%1 = load i8*, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%tobool.i.i = icmp eq i8* %1, null |
|
br i1 %tobool.i.i, label %if.end.i.i, label %land.lhs.true.i.i |
|
|
|
land.lhs.true.i.i: ; preds = %if.end.3.i |
|
%capacity.i.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 1 |
|
%2 = load i16, i16* %capacity.i.i, align 2, !tbaa !7 |
|
%cmp.i.i = icmp ult i16 %2, %add.i |
|
br i1 %cmp.i.i, label %if.end.i.i, label %if.end.6.i |
|
|
|
if.end.i.i: ; preds = %land.lhs.true.i.i, %if.end.3.i |
|
%add.i.i.i = add i16 %add.i, 1 |
|
%call.i.i.i = tail call noalias i8* @realloc(i8* %1, i16 %add.i.i.i) #3 |
|
%tobool.i.i.i = icmp eq i8* %call.i.i.i, null |
|
br i1 %tobool.i.i.i, label %if.then, label %if.then.3.i.i |
|
|
|
if.then.3.i.i: ; preds = %if.end.i.i |
|
store i8* %call.i.i.i, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%capacity.i.i.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 1 |
|
store i16 %add.i, i16* %capacity.i.i.i, align 2, !tbaa !7 |
|
%3 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp4.i.i = icmp eq i16 %3, 0 |
|
br i1 %cmp4.i.i, label %if.then.5.i.i, label %if.end.6.i |
|
|
|
if.then.5.i.i: ; preds = %if.then.3.i.i |
|
store i8 0, i8* %call.i.i.i, align 1, !tbaa !9 |
|
br label %if.end.6.i |
|
|
|
if.end.6.i: ; preds = %if.then.5.i.i, %if.then.3.i.i, %land.lhs.true.i.i |
|
%4 = phi i16 [ %0, %land.lhs.true.i.i ], [ 0, %if.then.5.i.i ], [ %3, %if.then.3.i.i ] |
|
%5 = phi i8* [ %1, %land.lhs.true.i.i ], [ %call.i.i.i, %if.then.5.i.i ], [ %call.i.i.i, %if.then.3.i.i ] |
|
%add.ptr.i = getelementptr inbounds i8, i8* %5, i16 %4 |
|
%call8.i = tail call i8* @strcpy(i8* %add.ptr.i, i8* %cstr) #3 |
|
store i16 %add.i, i16* %len.i, align 2, !tbaa !8 |
|
br label %if.end |
|
|
|
if.then: ; preds = %entry.if.then_crit_edge, %if.end.i.i |
|
%buffer.i.pre-phi = phi i8** [ %.pre, %entry.if.then_crit_edge ], [ %buffer.i.i, %if.end.i.i ] |
|
%6 = load i8*, i8** %buffer.i.pre-phi, align 2, !tbaa !1 |
|
%tobool.i.8 = icmp eq i8* %6, null |
|
br i1 %tobool.i.8, label %_ZN6String10invalidateEv.exit, label %if.then.i |
|
|
|
if.then.i: ; preds = %if.then |
|
tail call void @free(i8* %6) #3 |
|
br label %_ZN6String10invalidateEv.exit |
|
|
|
_ZN6String10invalidateEv.exit: ; preds = %if.then, %if.then.i |
|
store i8* null, i8** %buffer.i.pre-phi, align 2, !tbaa !1 |
|
%len.i.9 = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 2 |
|
store i16 0, i16* %len.i.9, align 2, !tbaa !8 |
|
%capacity.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
br label %if.end |
|
|
|
if.end: ; preds = %if.end.i, %if.end.6.i, %_ZN6String10invalidateEv.exit |
|
ret %class.StringSumHelper* %lhs |
|
} |
|
|
|
; Function Attrs: nounwind |
|
define dereferenceable(6) %class.StringSumHelper* @_ZplRK15StringSumHelperc(%class.StringSumHelper* dereferenceable(6) %lhs, i8 signext %c) #0 { |
|
entry: |
|
%buf.i = alloca [2 x i8], align 1 |
|
%0 = getelementptr inbounds [2 x i8], [2 x i8]* %buf.i, i16 0, i16 0 |
|
call void @llvm.lifetime.start(i64 2, i8* %0) #3 |
|
store i8 %c, i8* %0, align 1, !tbaa !9 |
|
%arrayidx2.i = getelementptr inbounds [2 x i8], [2 x i8]* %buf.i, i16 0, i16 1 |
|
store i8 0, i8* %arrayidx2.i, align 1, !tbaa !9 |
|
%len.i.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 2 |
|
%1 = load i16, i16* %len.i.i, align 2, !tbaa !8 |
|
%add.i.i = add i16 %1, 1 |
|
%buffer.i.i.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 0 |
|
%2 = load i8*, i8** %buffer.i.i.i, align 2, !tbaa !1 |
|
%tobool.i.i.i = icmp eq i8* %2, null |
|
br i1 %tobool.i.i.i, label %if.end.i.i.i, label %land.lhs.true.i.i.i |
|
|
|
land.lhs.true.i.i.i: ; preds = %entry |
|
%capacity.i.i.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 1 |
|
%3 = load i16, i16* %capacity.i.i.i, align 2, !tbaa !7 |
|
%cmp.i.i.i = icmp ult i16 %3, %add.i.i |
|
br i1 %cmp.i.i.i, label %if.end.i.i.i, label %_ZN6String6concatEc.exit |
|
|
|
if.end.i.i.i: ; preds = %land.lhs.true.i.i.i, %entry |
|
%add.i.i.i.i = add i16 %1, 2 |
|
%call.i.i.i.i = tail call noalias i8* @realloc(i8* %2, i16 %add.i.i.i.i) #3 |
|
%tobool.i.i.i.i = icmp eq i8* %call.i.i.i.i, null |
|
br i1 %tobool.i.i.i.i, label %if.then, label %if.then.3.i.i.i |
|
|
|
if.then.3.i.i.i: ; preds = %if.end.i.i.i |
|
store i8* %call.i.i.i.i, i8** %buffer.i.i.i, align 2, !tbaa !1 |
|
%capacity.i.i.i.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 1 |
|
store i16 %add.i.i, i16* %capacity.i.i.i.i, align 2, !tbaa !7 |
|
%4 = load i16, i16* %len.i.i, align 2, !tbaa !8 |
|
%cmp4.i.i.i = icmp eq i16 %4, 0 |
|
br i1 %cmp4.i.i.i, label %if.then.5.i.i.i, label %_ZN6String6concatEc.exit |
|
|
|
if.then.5.i.i.i: ; preds = %if.then.3.i.i.i |
|
store i8 0, i8* %call.i.i.i.i, align 1, !tbaa !9 |
|
br label %_ZN6String6concatEc.exit |
|
|
|
_ZN6String6concatEc.exit: ; preds = %land.lhs.true.i.i.i, %if.then.3.i.i.i, %if.then.5.i.i.i |
|
%5 = phi i16 [ %1, %land.lhs.true.i.i.i ], [ 0, %if.then.5.i.i.i ], [ %4, %if.then.3.i.i.i ] |
|
%6 = phi i8* [ %2, %land.lhs.true.i.i.i ], [ %call.i.i.i.i, %if.then.5.i.i.i ], [ %call.i.i.i.i, %if.then.3.i.i.i ] |
|
%add.ptr.i.i = getelementptr inbounds i8, i8* %6, i16 %5 |
|
%call8.i.i = call i8* @strcpy(i8* %add.ptr.i.i, i8* %0) #3 |
|
store i16 %add.i.i, i16* %len.i.i, align 2, !tbaa !8 |
|
call void @llvm.lifetime.end(i64 2, i8* %0) #3 |
|
br label %if.end |
|
|
|
if.then: ; preds = %if.end.i.i.i |
|
call void @llvm.lifetime.end(i64 2, i8* %0) #3 |
|
%7 = load i8*, i8** %buffer.i.i.i, align 2, !tbaa !1 |
|
%tobool.i = icmp eq i8* %7, null |
|
br i1 %tobool.i, label %_ZN6String10invalidateEv.exit, label %if.then.i |
|
|
|
if.then.i: ; preds = %if.then |
|
tail call void @free(i8* %7) #3 |
|
br label %_ZN6String10invalidateEv.exit |
|
|
|
_ZN6String10invalidateEv.exit: ; preds = %if.then, %if.then.i |
|
store i8* null, i8** %buffer.i.i.i, align 2, !tbaa !1 |
|
store i16 0, i16* %len.i.i, align 2, !tbaa !8 |
|
%capacity.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
br label %if.end |
|
|
|
if.end: ; preds = %_ZN6String6concatEc.exit, %_ZN6String10invalidateEv.exit |
|
ret %class.StringSumHelper* %lhs |
|
} |
|
|
|
define dereferenceable(6) %class.StringSumHelper* @_ZplRK15StringSumHelperh(%class.StringSumHelper* dereferenceable(6) %lhs, i8 zeroext %num) #2 { |
|
entry: |
|
%0 = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0 |
|
%call = tail call zeroext i8 @_ZN6String6concatEh(%class.String* %0, i8 zeroext %num) |
|
%tobool = icmp eq i8 %call, 0 |
|
br i1 %tobool, label %if.then, label %if.end |
|
|
|
if.then: ; preds = %entry |
|
%buffer.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 0 |
|
%1 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i = icmp eq i8* %1, null |
|
br i1 %tobool.i, label %_ZN6String10invalidateEv.exit, label %if.then.i |
|
|
|
if.then.i: ; preds = %if.then |
|
tail call void @free(i8* %1) #3 |
|
br label %_ZN6String10invalidateEv.exit |
|
|
|
_ZN6String10invalidateEv.exit: ; preds = %if.then, %if.then.i |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%len.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 2 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
%capacity.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
br label %if.end |
|
|
|
if.end: ; preds = %entry, %_ZN6String10invalidateEv.exit |
|
ret %class.StringSumHelper* %lhs |
|
} |
|
|
|
define dereferenceable(6) %class.StringSumHelper* @_ZplRK15StringSumHelperi(%class.StringSumHelper* dereferenceable(6) %lhs, i16 %num) #2 { |
|
entry: |
|
%0 = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0 |
|
%call = tail call zeroext i8 @_ZN6String6concatEi(%class.String* %0, i16 %num) |
|
%tobool = icmp eq i8 %call, 0 |
|
br i1 %tobool, label %if.then, label %if.end |
|
|
|
if.then: ; preds = %entry |
|
%buffer.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 0 |
|
%1 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i = icmp eq i8* %1, null |
|
br i1 %tobool.i, label %_ZN6String10invalidateEv.exit, label %if.then.i |
|
|
|
if.then.i: ; preds = %if.then |
|
tail call void @free(i8* %1) #3 |
|
br label %_ZN6String10invalidateEv.exit |
|
|
|
_ZN6String10invalidateEv.exit: ; preds = %if.then, %if.then.i |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%len.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 2 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
%capacity.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
br label %if.end |
|
|
|
if.end: ; preds = %entry, %_ZN6String10invalidateEv.exit |
|
ret %class.StringSumHelper* %lhs |
|
} |
|
|
|
define dereferenceable(6) %class.StringSumHelper* @_ZplRK15StringSumHelperj(%class.StringSumHelper* dereferenceable(6) %lhs, i16 %num) #2 { |
|
entry: |
|
%0 = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0 |
|
%call = tail call zeroext i8 @_ZN6String6concatEj(%class.String* %0, i16 %num) |
|
%tobool = icmp eq i8 %call, 0 |
|
br i1 %tobool, label %if.then, label %if.end |
|
|
|
if.then: ; preds = %entry |
|
%buffer.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 0 |
|
%1 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i = icmp eq i8* %1, null |
|
br i1 %tobool.i, label %_ZN6String10invalidateEv.exit, label %if.then.i |
|
|
|
if.then.i: ; preds = %if.then |
|
tail call void @free(i8* %1) #3 |
|
br label %_ZN6String10invalidateEv.exit |
|
|
|
_ZN6String10invalidateEv.exit: ; preds = %if.then, %if.then.i |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%len.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 2 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
%capacity.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
br label %if.end |
|
|
|
if.end: ; preds = %entry, %_ZN6String10invalidateEv.exit |
|
ret %class.StringSumHelper* %lhs |
|
} |
|
|
|
define dereferenceable(6) %class.StringSumHelper* @_ZplRK15StringSumHelperl(%class.StringSumHelper* dereferenceable(6) %lhs, i32 %num) #2 { |
|
entry: |
|
%0 = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0 |
|
%call = tail call zeroext i8 @_ZN6String6concatEl(%class.String* %0, i32 %num) |
|
%tobool = icmp eq i8 %call, 0 |
|
br i1 %tobool, label %if.then, label %if.end |
|
|
|
if.then: ; preds = %entry |
|
%buffer.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 0 |
|
%1 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i = icmp eq i8* %1, null |
|
br i1 %tobool.i, label %_ZN6String10invalidateEv.exit, label %if.then.i |
|
|
|
if.then.i: ; preds = %if.then |
|
tail call void @free(i8* %1) #3 |
|
br label %_ZN6String10invalidateEv.exit |
|
|
|
_ZN6String10invalidateEv.exit: ; preds = %if.then, %if.then.i |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%len.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 2 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
%capacity.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
br label %if.end |
|
|
|
if.end: ; preds = %entry, %_ZN6String10invalidateEv.exit |
|
ret %class.StringSumHelper* %lhs |
|
} |
|
|
|
define dereferenceable(6) %class.StringSumHelper* @_ZplRK15StringSumHelperm(%class.StringSumHelper* dereferenceable(6) %lhs, i32 %num) #2 { |
|
entry: |
|
%0 = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0 |
|
%call = tail call zeroext i8 @_ZN6String6concatEm(%class.String* %0, i32 %num) |
|
%tobool = icmp eq i8 %call, 0 |
|
br i1 %tobool, label %if.then, label %if.end |
|
|
|
if.then: ; preds = %entry |
|
%buffer.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 0 |
|
%1 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i = icmp eq i8* %1, null |
|
br i1 %tobool.i, label %_ZN6String10invalidateEv.exit, label %if.then.i |
|
|
|
if.then.i: ; preds = %if.then |
|
tail call void @free(i8* %1) #3 |
|
br label %_ZN6String10invalidateEv.exit |
|
|
|
_ZN6String10invalidateEv.exit: ; preds = %if.then, %if.then.i |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%len.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 2 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
%capacity.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
br label %if.end |
|
|
|
if.end: ; preds = %entry, %_ZN6String10invalidateEv.exit |
|
ret %class.StringSumHelper* %lhs |
|
} |
|
|
|
define dereferenceable(6) %class.StringSumHelper* @_ZplRK15StringSumHelperf(%class.StringSumHelper* dereferenceable(6) %lhs, float %num) #2 { |
|
entry: |
|
%0 = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0 |
|
%call = tail call zeroext i8 @_ZN6String6concatEf(%class.String* %0, float %num) |
|
%tobool = icmp eq i8 %call, 0 |
|
br i1 %tobool, label %if.then, label %if.end |
|
|
|
if.then: ; preds = %entry |
|
%buffer.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 0 |
|
%1 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i = icmp eq i8* %1, null |
|
br i1 %tobool.i, label %_ZN6String10invalidateEv.exit, label %if.then.i |
|
|
|
if.then.i: ; preds = %if.then |
|
tail call void @free(i8* %1) #3 |
|
br label %_ZN6String10invalidateEv.exit |
|
|
|
_ZN6String10invalidateEv.exit: ; preds = %if.then, %if.then.i |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%len.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 2 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
%capacity.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
br label %if.end |
|
|
|
if.end: ; preds = %entry, %_ZN6String10invalidateEv.exit |
|
ret %class.StringSumHelper* %lhs |
|
} |
|
|
|
define dereferenceable(6) %class.StringSumHelper* @_ZplRK15StringSumHelperd(%class.StringSumHelper* dereferenceable(6) %lhs, double %num) #2 { |
|
entry: |
|
%0 = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0 |
|
%call = tail call zeroext i8 @_ZN6String6concatEd(%class.String* %0, double %num) |
|
%tobool = icmp eq i8 %call, 0 |
|
br i1 %tobool, label %if.then, label %if.end |
|
|
|
if.then: ; preds = %entry |
|
%buffer.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 0 |
|
%1 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i = icmp eq i8* %1, null |
|
br i1 %tobool.i, label %_ZN6String10invalidateEv.exit, label %if.then.i |
|
|
|
if.then.i: ; preds = %if.then |
|
tail call void @free(i8* %1) #3 |
|
br label %_ZN6String10invalidateEv.exit |
|
|
|
_ZN6String10invalidateEv.exit: ; preds = %if.then, %if.then.i |
|
store i8* null, i8** %buffer.i, align 2, !tbaa !1 |
|
%len.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 2 |
|
store i16 0, i16* %len.i, align 2, !tbaa !8 |
|
%capacity.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
br label %if.end |
|
|
|
if.end: ; preds = %entry, %_ZN6String10invalidateEv.exit |
|
ret %class.StringSumHelper* %lhs |
|
} |
|
|
|
define dereferenceable(6) %class.StringSumHelper* @_ZplRK15StringSumHelperPK19__FlashStringHelper(%class.StringSumHelper* dereferenceable(6) %lhs, %class.__FlashStringHelper* %rhs) #2 { |
|
entry: |
|
%tobool.i = icmp eq %class.__FlashStringHelper* %rhs, null |
|
br i1 %tobool.i, label %entry.if.then_crit_edge, label %if.end.i |
|
|
|
entry.if.then_crit_edge: ; preds = %entry |
|
%.pre = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 0 |
|
br label %if.then |
|
|
|
if.end.i: ; preds = %entry |
|
%0 = bitcast %class.__FlashStringHelper* %rhs to i8* |
|
%call.i.i = tail call i16 @__strlen_P(i8* %0) #6 |
|
%cmp.i = icmp eq i16 %call.i.i, 0 |
|
br i1 %cmp.i, label %if.end, label %if.end.3.i |
|
|
|
if.end.3.i: ; preds = %if.end.i |
|
%len.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 2 |
|
%1 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%add.i = add i16 %1, %call.i.i |
|
%buffer.i.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 0 |
|
%2 = load i8*, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%tobool.i.i = icmp eq i8* %2, null |
|
br i1 %tobool.i.i, label %if.end.i.i, label %land.lhs.true.i.i |
|
|
|
land.lhs.true.i.i: ; preds = %if.end.3.i |
|
%capacity.i.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 1 |
|
%3 = load i16, i16* %capacity.i.i, align 2, !tbaa !7 |
|
%cmp.i.i = icmp ult i16 %3, %add.i |
|
br i1 %cmp.i.i, label %if.end.i.i, label %if.end.7.i |
|
|
|
if.end.i.i: ; preds = %land.lhs.true.i.i, %if.end.3.i |
|
%add.i.i.i = add i16 %add.i, 1 |
|
%call.i.i.i = tail call noalias i8* @realloc(i8* %2, i16 %add.i.i.i) #3 |
|
%tobool.i.i.i = icmp eq i8* %call.i.i.i, null |
|
br i1 %tobool.i.i.i, label %if.then, label %if.then.3.i.i |
|
|
|
if.then.3.i.i: ; preds = %if.end.i.i |
|
store i8* %call.i.i.i, i8** %buffer.i.i, align 2, !tbaa !1 |
|
%capacity.i.i.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 1 |
|
store i16 %add.i, i16* %capacity.i.i.i, align 2, !tbaa !7 |
|
%4 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp4.i.i = icmp eq i16 %4, 0 |
|
br i1 %cmp4.i.i, label %if.then.5.i.i, label %if.end.7.i |
|
|
|
if.then.5.i.i: ; preds = %if.then.3.i.i |
|
store i8 0, i8* %call.i.i.i, align 1, !tbaa !9 |
|
br label %if.end.7.i |
|
|
|
if.end.7.i: ; preds = %if.then.5.i.i, %if.then.3.i.i, %land.lhs.true.i.i |
|
%5 = phi i16 [ %1, %land.lhs.true.i.i ], [ 0, %if.then.5.i.i ], [ %4, %if.then.3.i.i ] |
|
%6 = phi i8* [ %2, %land.lhs.true.i.i ], [ %call.i.i.i, %if.then.5.i.i ], [ %call.i.i.i, %if.then.3.i.i ] |
|
%add.ptr.i = getelementptr inbounds i8, i8* %6, i16 %5 |
|
%call9.i = tail call i8* @strcpy_P(i8* %add.ptr.i, i8* %0) |
|
store i16 %add.i, i16* %len.i, align 2, !tbaa !8 |
|
br label %if.end |
|
|
|
if.then: ; preds = %entry.if.then_crit_edge, %if.end.i.i |
|
%buffer.i.pre-phi = phi i8** [ %.pre, %entry.if.then_crit_edge ], [ %buffer.i.i, %if.end.i.i ] |
|
%7 = load i8*, i8** %buffer.i.pre-phi, align 2, !tbaa !1 |
|
%tobool.i.4 = icmp eq i8* %7, null |
|
br i1 %tobool.i.4, label %_ZN6String10invalidateEv.exit, label %if.then.i |
|
|
|
if.then.i: ; preds = %if.then |
|
tail call void @free(i8* %7) #3 |
|
br label %_ZN6String10invalidateEv.exit |
|
|
|
_ZN6String10invalidateEv.exit: ; preds = %if.then, %if.then.i |
|
store i8* null, i8** %buffer.i.pre-phi, align 2, !tbaa !1 |
|
%len.i.5 = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 2 |
|
store i16 0, i16* %len.i.5, align 2, !tbaa !8 |
|
%capacity.i = getelementptr inbounds %class.StringSumHelper, %class.StringSumHelper* %lhs, i16 0, i32 0, i32 1 |
|
store i16 0, i16* %capacity.i, align 2, !tbaa !7 |
|
br label %if.end |
|
|
|
if.end: ; preds = %if.end.7.i, %if.end.i, %_ZN6String10invalidateEv.exit |
|
ret %class.StringSumHelper* %lhs |
|
} |
|
|
|
; Function Attrs: nounwind readonly |
|
define i16 @_ZNK6String9compareToERKS_(%class.String* nocapture readonly %this, %class.String* nocapture readonly dereferenceable(6) %s) #1 align 2 { |
|
entry: |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%0 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%tobool = icmp eq i8* %0, null |
|
%buffer4.phi.trans.insert = getelementptr inbounds %class.String, %class.String* %s, i16 0, i32 0 |
|
%.pre = load i8*, i8** %buffer4.phi.trans.insert, align 2, !tbaa !1 |
|
%tobool5 = icmp eq i8* %.pre, null |
|
br i1 %tobool, label %if.then, label %lor.lhs.false |
|
|
|
lor.lhs.false: ; preds = %entry |
|
br i1 %tobool5, label %land.lhs.true.10, label %if.end.17 |
|
|
|
if.then: ; preds = %entry |
|
br i1 %tobool5, label %return, label %land.lhs.true |
|
|
|
land.lhs.true: ; preds = %if.then |
|
%len = getelementptr inbounds %class.String, %class.String* %s, i16 0, i32 2 |
|
%1 = load i16, i16* %len, align 2, !tbaa !8 |
|
%cmp = icmp eq i16 %1, 0 |
|
br i1 %cmp, label %return, label %if.then.6 |
|
|
|
if.then.6: ; preds = %land.lhs.true |
|
%2 = load i8, i8* %.pre, align 1, !tbaa !9 |
|
%conv = zext i8 %2 to i16 |
|
%sub = sub nsw i16 0, %conv |
|
br label %return |
|
|
|
land.lhs.true.10: ; preds = %lor.lhs.false |
|
%len11 = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%3 = load i16, i16* %len11, align 2, !tbaa !8 |
|
%cmp12 = icmp eq i16 %3, 0 |
|
br i1 %cmp12, label %return, label %if.then.13 |
|
|
|
if.then.13: ; preds = %land.lhs.true.10 |
|
%4 = load i8, i8* %0, align 1, !tbaa !9 |
|
%conv15 = zext i8 %4 to i16 |
|
br label %return |
|
|
|
if.end.17: ; preds = %lor.lhs.false |
|
%call = tail call i16 @strcmp(i8* %0, i8* %.pre) #5 |
|
br label %return |
|
|
|
return: ; preds = %if.then, %land.lhs.true, %land.lhs.true.10, %if.end.17, %if.then.13, %if.then.6 |
|
%retval.0 = phi i16 [ %call, %if.end.17 ], [ %sub, %if.then.6 ], [ %conv15, %if.then.13 ], [ 0, %land.lhs.true.10 ], [ 0, %land.lhs.true ], [ 0, %if.then ] |
|
ret i16 %retval.0 |
|
} |
|
|
|
; Function Attrs: nounwind readonly |
|
declare i16 @strcmp(i8* nocapture, i8* nocapture) #1 |
|
|
|
; Function Attrs: nounwind readonly |
|
define zeroext i8 @_ZNK6String6equalsERKS_(%class.String* nocapture readonly %this, %class.String* nocapture readonly dereferenceable(6) %s2) #1 align 2 { |
|
entry: |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len, align 2, !tbaa !8 |
|
%len2 = getelementptr inbounds %class.String, %class.String* %s2, i16 0, i32 2 |
|
%1 = load i16, i16* %len2, align 2, !tbaa !8 |
|
%cmp = icmp eq i16 %0, %1 |
|
br i1 %cmp, label %land.rhs, label %land.end |
|
|
|
land.rhs: ; preds = %entry |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%2 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i = icmp eq i8* %2, null |
|
%buffer4.phi.trans.insert.i = getelementptr inbounds %class.String, %class.String* %s2, i16 0, i32 0 |
|
%.pre.i = load i8*, i8** %buffer4.phi.trans.insert.i, align 2, !tbaa !1 |
|
%tobool5.i = icmp eq i8* %.pre.i, null |
|
br i1 %tobool.i, label %if.then.i, label %lor.lhs.false.i |
|
|
|
lor.lhs.false.i: ; preds = %land.rhs |
|
br i1 %tobool5.i, label %land.lhs.true.10.i, label %if.end.17.i |
|
|
|
if.then.i: ; preds = %land.rhs |
|
%cmp.i = icmp eq i16 %0, 0 |
|
%or.cond = or i1 %cmp.i, %tobool5.i |
|
br i1 %or.cond, label %_ZNK6String9compareToERKS_.exit, label %if.then.6.i |
|
|
|
if.then.6.i: ; preds = %if.then.i |
|
%3 = load i8, i8* %.pre.i, align 1, !tbaa !9 |
|
%conv.i = zext i8 %3 to i16 |
|
%sub.i = sub nsw i16 0, %conv.i |
|
br label %_ZNK6String9compareToERKS_.exit |
|
|
|
land.lhs.true.10.i: ; preds = %lor.lhs.false.i |
|
%cmp12.i = icmp eq i16 %0, 0 |
|
br i1 %cmp12.i, label %_ZNK6String9compareToERKS_.exit, label %if.then.13.i |
|
|
|
if.then.13.i: ; preds = %land.lhs.true.10.i |
|
%4 = load i8, i8* %2, align 1, !tbaa !9 |
|
%conv15.i = zext i8 %4 to i16 |
|
br label %_ZNK6String9compareToERKS_.exit |
|
|
|
if.end.17.i: ; preds = %lor.lhs.false.i |
|
%call.i = tail call i16 @strcmp(i8* %2, i8* %.pre.i) #5 |
|
br label %_ZNK6String9compareToERKS_.exit |
|
|
|
_ZNK6String9compareToERKS_.exit: ; preds = %if.then.i, %if.then.6.i, %land.lhs.true.10.i, %if.then.13.i, %if.end.17.i |
|
%retval.0.i = phi i16 [ %call.i, %if.end.17.i ], [ %sub.i, %if.then.6.i ], [ %conv15.i, %if.then.13.i ], [ 0, %land.lhs.true.10.i ], [ 0, %if.then.i ] |
|
%cmp3 = icmp eq i16 %retval.0.i, 0 |
|
br label %land.end |
|
|
|
land.end: ; preds = %_ZNK6String9compareToERKS_.exit, %entry |
|
%5 = phi i1 [ false, %entry ], [ %cmp3, %_ZNK6String9compareToERKS_.exit ] |
|
%conv = zext i1 %5 to i8 |
|
ret i8 %conv |
|
} |
|
|
|
; Function Attrs: nounwind readonly |
|
define zeroext i8 @_ZNK6String6equalsEPKc(%class.String* nocapture readonly %this, i8* readonly %cstr) #1 align 2 { |
|
entry: |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len, align 2, !tbaa !8 |
|
%cmp = icmp eq i16 %0, 0 |
|
%cmp2 = icmp eq i8* %cstr, null |
|
br i1 %cmp, label %if.then, label %if.end |
|
|
|
if.then: ; preds = %entry |
|
br i1 %cmp2, label %lor.end, label %lor.rhs |
|
|
|
lor.rhs: ; preds = %if.then |
|
%1 = load i8, i8* %cstr, align 1, !tbaa !9 |
|
%cmp3 = icmp eq i8 %1, 0 |
|
br label %lor.end |
|
|
|
lor.end: ; preds = %lor.rhs, %if.then |
|
%2 = phi i1 [ true, %if.then ], [ %cmp3, %lor.rhs ] |
|
%conv4 = zext i1 %2 to i8 |
|
br label %return |
|
|
|
if.end: ; preds = %entry |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%3 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
br i1 %cmp2, label %if.then.6, label %if.end.10 |
|
|
|
if.then.6: ; preds = %if.end |
|
%4 = load i8, i8* %3, align 1, !tbaa !9 |
|
%cmp8 = icmp eq i8 %4, 0 |
|
%conv9 = zext i1 %cmp8 to i8 |
|
br label %return |
|
|
|
if.end.10: ; preds = %if.end |
|
%call = tail call i16 @strcmp(i8* %3, i8* %cstr) #5 |
|
%cmp12 = icmp eq i16 %call, 0 |
|
%conv13 = zext i1 %cmp12 to i8 |
|
br label %return |
|
|
|
return: ; preds = %if.end.10, %if.then.6, %lor.end |
|
%retval.0 = phi i8 [ %conv4, %lor.end ], [ %conv9, %if.then.6 ], [ %conv13, %if.end.10 ] |
|
ret i8 %retval.0 |
|
} |
|
|
|
; Function Attrs: nounwind readonly |
|
define zeroext i8 @_ZNK6StringltERKS_(%class.String* nocapture readonly %this, %class.String* nocapture readonly dereferenceable(6) %rhs) #1 align 2 { |
|
entry: |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%0 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i = icmp eq i8* %0, null |
|
%buffer4.phi.trans.insert.i = getelementptr inbounds %class.String, %class.String* %rhs, i16 0, i32 0 |
|
%.pre.i = load i8*, i8** %buffer4.phi.trans.insert.i, align 2, !tbaa !1 |
|
%tobool5.i = icmp eq i8* %.pre.i, null |
|
br i1 %tobool.i, label %if.then.i, label %lor.lhs.false.i |
|
|
|
lor.lhs.false.i: ; preds = %entry |
|
br i1 %tobool5.i, label %land.lhs.true.10.i, label %if.end.17.i |
|
|
|
if.then.i: ; preds = %entry |
|
br i1 %tobool5.i, label %land.lhs.true.10.i, label %land.lhs.true.i |
|
|
|
land.lhs.true.i: ; preds = %if.then.i |
|
%len.i = getelementptr inbounds %class.String, %class.String* %rhs, i16 0, i32 2 |
|
%1 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp.i = icmp eq i16 %1, 0 |
|
br i1 %cmp.i, label %land.lhs.true.10.i, label %if.then.6.i |
|
|
|
if.then.6.i: ; preds = %land.lhs.true.i |
|
%2 = load i8, i8* %.pre.i, align 1, !tbaa !9 |
|
%conv.i = zext i8 %2 to i16 |
|
%sub.i = sub nsw i16 0, %conv.i |
|
%extract2 = lshr i16 %sub.i, 15 |
|
%extract.t3 = trunc i16 %extract2 to i8 |
|
br label %land.lhs.true.10.i |
|
|
|
land.lhs.true.10.i: ; preds = %if.end.17.i, %if.then.6.i, %land.lhs.true.i, %if.then.i, %lor.lhs.false.i |
|
%merge = phi i8 [ 0, %lor.lhs.false.i ], [ %extract.t, %if.end.17.i ], [ %extract.t3, %if.then.6.i ], [ 0, %land.lhs.true.i ], [ 0, %if.then.i ] |
|
ret i8 %merge |
|
|
|
if.end.17.i: ; preds = %lor.lhs.false.i |
|
%call.i = tail call i16 @strcmp(i8* %0, i8* %.pre.i) #5 |
|
%extract = lshr i16 %call.i, 15 |
|
%extract.t = trunc i16 %extract to i8 |
|
br label %land.lhs.true.10.i |
|
} |
|
|
|
; Function Attrs: nounwind readonly |
|
define zeroext i8 @_ZNK6StringgtERKS_(%class.String* nocapture readonly %this, %class.String* nocapture readonly dereferenceable(6) %rhs) #1 align 2 { |
|
entry: |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%0 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i = icmp eq i8* %0, null |
|
%buffer4.phi.trans.insert.i = getelementptr inbounds %class.String, %class.String* %rhs, i16 0, i32 0 |
|
%.pre.i = load i8*, i8** %buffer4.phi.trans.insert.i, align 2, !tbaa !1 |
|
%tobool5.i = icmp eq i8* %.pre.i, null |
|
br i1 %tobool.i, label %if.then.i, label %lor.lhs.false.i |
|
|
|
lor.lhs.false.i: ; preds = %entry |
|
br i1 %tobool5.i, label %land.lhs.true.10.i, label %if.end.17.i |
|
|
|
if.then.i: ; preds = %entry |
|
br i1 %tobool5.i, label %_ZNK6String9compareToERKS_.exit, label %land.lhs.true.i |
|
|
|
land.lhs.true.i: ; preds = %if.then.i |
|
%len.i = getelementptr inbounds %class.String, %class.String* %rhs, i16 0, i32 2 |
|
%1 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp.i = icmp eq i16 %1, 0 |
|
br i1 %cmp.i, label %_ZNK6String9compareToERKS_.exit, label %if.then.6.i |
|
|
|
if.then.6.i: ; preds = %land.lhs.true.i |
|
%2 = load i8, i8* %.pre.i, align 1, !tbaa !9 |
|
%conv.i = zext i8 %2 to i16 |
|
%sub.i = sub nsw i16 0, %conv.i |
|
br label %_ZNK6String9compareToERKS_.exit |
|
|
|
land.lhs.true.10.i: ; preds = %lor.lhs.false.i |
|
%len11.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%3 = load i16, i16* %len11.i, align 2, !tbaa !8 |
|
%cmp12.i = icmp eq i16 %3, 0 |
|
br i1 %cmp12.i, label %_ZNK6String9compareToERKS_.exit, label %if.then.13.i |
|
|
|
if.then.13.i: ; preds = %land.lhs.true.10.i |
|
%4 = load i8, i8* %0, align 1, !tbaa !9 |
|
%conv15.i = zext i8 %4 to i16 |
|
br label %_ZNK6String9compareToERKS_.exit |
|
|
|
if.end.17.i: ; preds = %lor.lhs.false.i |
|
%call.i = tail call i16 @strcmp(i8* %0, i8* %.pre.i) #5 |
|
br label %_ZNK6String9compareToERKS_.exit |
|
|
|
_ZNK6String9compareToERKS_.exit: ; preds = %if.then.i, %land.lhs.true.i, %if.then.6.i, %land.lhs.true.10.i, %if.then.13.i, %if.end.17.i |
|
%retval.0.i = phi i16 [ %call.i, %if.end.17.i ], [ %sub.i, %if.then.6.i ], [ %conv15.i, %if.then.13.i ], [ 0, %land.lhs.true.10.i ], [ 0, %land.lhs.true.i ], [ 0, %if.then.i ] |
|
%cmp = icmp sgt i16 %retval.0.i, 0 |
|
%conv = zext i1 %cmp to i8 |
|
ret i8 %conv |
|
} |
|
|
|
; Function Attrs: nounwind readonly |
|
define zeroext i8 @_ZNK6StringleERKS_(%class.String* nocapture readonly %this, %class.String* nocapture readonly dereferenceable(6) %rhs) #1 align 2 { |
|
entry: |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%0 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i = icmp eq i8* %0, null |
|
%buffer4.phi.trans.insert.i = getelementptr inbounds %class.String, %class.String* %rhs, i16 0, i32 0 |
|
%.pre.i = load i8*, i8** %buffer4.phi.trans.insert.i, align 2, !tbaa !1 |
|
%tobool5.i = icmp eq i8* %.pre.i, null |
|
br i1 %tobool.i, label %if.then.i, label %lor.lhs.false.i |
|
|
|
lor.lhs.false.i: ; preds = %entry |
|
br i1 %tobool5.i, label %land.lhs.true.10.i, label %if.end.17.i |
|
|
|
if.then.i: ; preds = %entry |
|
br i1 %tobool5.i, label %_ZNK6String9compareToERKS_.exit, label %land.lhs.true.i |
|
|
|
land.lhs.true.i: ; preds = %if.then.i |
|
%len.i = getelementptr inbounds %class.String, %class.String* %rhs, i16 0, i32 2 |
|
%1 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp.i = icmp eq i16 %1, 0 |
|
br i1 %cmp.i, label %_ZNK6String9compareToERKS_.exit, label %if.then.6.i |
|
|
|
if.then.6.i: ; preds = %land.lhs.true.i |
|
%2 = load i8, i8* %.pre.i, align 1, !tbaa !9 |
|
%conv.i = zext i8 %2 to i16 |
|
%sub.i = sub nsw i16 0, %conv.i |
|
br label %_ZNK6String9compareToERKS_.exit |
|
|
|
land.lhs.true.10.i: ; preds = %lor.lhs.false.i |
|
%len11.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%3 = load i16, i16* %len11.i, align 2, !tbaa !8 |
|
%cmp12.i = icmp eq i16 %3, 0 |
|
br i1 %cmp12.i, label %_ZNK6String9compareToERKS_.exit, label %if.then.13.i |
|
|
|
if.then.13.i: ; preds = %land.lhs.true.10.i |
|
%4 = load i8, i8* %0, align 1, !tbaa !9 |
|
%conv15.i = zext i8 %4 to i16 |
|
br label %_ZNK6String9compareToERKS_.exit |
|
|
|
if.end.17.i: ; preds = %lor.lhs.false.i |
|
%call.i = tail call i16 @strcmp(i8* %0, i8* %.pre.i) #5 |
|
br label %_ZNK6String9compareToERKS_.exit |
|
|
|
_ZNK6String9compareToERKS_.exit: ; preds = %if.then.i, %land.lhs.true.i, %if.then.6.i, %land.lhs.true.10.i, %if.then.13.i, %if.end.17.i |
|
%retval.0.i = phi i16 [ %call.i, %if.end.17.i ], [ %sub.i, %if.then.6.i ], [ %conv15.i, %if.then.13.i ], [ 0, %land.lhs.true.10.i ], [ 0, %land.lhs.true.i ], [ 0, %if.then.i ] |
|
%cmp = icmp slt i16 %retval.0.i, 1 |
|
%conv = zext i1 %cmp to i8 |
|
ret i8 %conv |
|
} |
|
|
|
; Function Attrs: nounwind readonly |
|
define zeroext i8 @_ZNK6StringgeERKS_(%class.String* nocapture readonly %this, %class.String* nocapture readonly dereferenceable(6) %rhs) #1 align 2 { |
|
entry: |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%0 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i = icmp eq i8* %0, null |
|
%buffer4.phi.trans.insert.i = getelementptr inbounds %class.String, %class.String* %rhs, i16 0, i32 0 |
|
%.pre.i = load i8*, i8** %buffer4.phi.trans.insert.i, align 2, !tbaa !1 |
|
%tobool5.i = icmp eq i8* %.pre.i, null |
|
br i1 %tobool.i, label %if.then.i, label %lor.lhs.false.i |
|
|
|
lor.lhs.false.i: ; preds = %entry |
|
br i1 %tobool5.i, label %_ZNK6String9compareToERKS_.exit, label %if.end.17.i |
|
|
|
if.then.i: ; preds = %entry |
|
br i1 %tobool5.i, label %_ZNK6String9compareToERKS_.exit, label %land.lhs.true.i |
|
|
|
land.lhs.true.i: ; preds = %if.then.i |
|
%len.i = getelementptr inbounds %class.String, %class.String* %rhs, i16 0, i32 2 |
|
%1 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp.i = icmp eq i16 %1, 0 |
|
br i1 %cmp.i, label %_ZNK6String9compareToERKS_.exit, label %if.then.6.i |
|
|
|
if.then.6.i: ; preds = %land.lhs.true.i |
|
%2 = load i8, i8* %.pre.i, align 1, !tbaa !9 |
|
%conv.i = zext i8 %2 to i16 |
|
%sub.i = sub nsw i16 0, %conv.i |
|
%extract2 = lshr i16 %sub.i, 15 |
|
%extract.t3 = trunc i16 %extract2 to i8 |
|
br label %_ZNK6String9compareToERKS_.exit |
|
|
|
if.end.17.i: ; preds = %lor.lhs.false.i |
|
%call.i = tail call i16 @strcmp(i8* %0, i8* %.pre.i) #5 |
|
%extract = lshr i16 %call.i, 15 |
|
%extract.t = trunc i16 %extract to i8 |
|
br label %_ZNK6String9compareToERKS_.exit |
|
|
|
_ZNK6String9compareToERKS_.exit: ; preds = %lor.lhs.false.i, %if.then.i, %land.lhs.true.i, %if.then.6.i, %if.end.17.i |
|
%retval.0.i.off15 = phi i8 [ %extract.t, %if.end.17.i ], [ %extract.t3, %if.then.6.i ], [ 0, %land.lhs.true.i ], [ 0, %if.then.i ], [ 0, %lor.lhs.false.i ] |
|
%.not = xor i8 %retval.0.i.off15, 1 |
|
ret i8 %.not |
|
} |
|
|
|
; Function Attrs: nounwind readonly |
|
define zeroext i8 @_ZNK6String16equalsIgnoreCaseERKS_(%class.String* readonly %this, %class.String* readonly dereferenceable(6) %s2) #1 align 2 { |
|
entry: |
|
%cmp = icmp eq %class.String* %this, %s2 |
|
br i1 %cmp, label %return, label %if.end |
|
|
|
if.end: ; preds = %entry |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len, align 2, !tbaa !8 |
|
%len2 = getelementptr inbounds %class.String, %class.String* %s2, i16 0, i32 2 |
|
%1 = load i16, i16* %len2, align 2, !tbaa !8 |
|
%cmp3 = icmp eq i16 %0, %1 |
|
br i1 %cmp3, label %if.end.5, label %return |
|
|
|
if.end.5: ; preds = %if.end |
|
%cmp7 = icmp eq i16 %0, 0 |
|
br i1 %cmp7, label %return, label %if.end.9 |
|
|
|
if.end.9: ; preds = %if.end.5 |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%2 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%buffer10 = getelementptr inbounds %class.String, %class.String* %s2, i16 0, i32 0 |
|
%3 = load i8*, i8** %buffer10, align 2, !tbaa !1 |
|
br label %while.cond |
|
|
|
while.cond: ; preds = %while.body, %if.end.9 |
|
%p1.0 = phi i8* [ %2, %if.end.9 ], [ %incdec.ptr, %while.body ] |
|
%p2.0 = phi i8* [ %3, %if.end.9 ], [ %incdec.ptr11, %while.body ] |
|
%4 = load i8, i8* %p1.0, align 1, !tbaa !9 |
|
%tobool = icmp eq i8 %4, 0 |
|
br i1 %tobool, label %return.loopexit, label %while.body |
|
|
|
while.body: ; preds = %while.cond |
|
%incdec.ptr = getelementptr inbounds i8, i8* %p1.0, i16 1 |
|
%conv = sext i8 %4 to i16 |
|
%call = tail call i16 @tolower(i16 %conv) #6 |
|
%incdec.ptr11 = getelementptr inbounds i8, i8* %p2.0, i16 1 |
|
%5 = load i8, i8* %p2.0, align 1, !tbaa !9 |
|
%conv12 = sext i8 %5 to i16 |
|
%call13 = tail call i16 @tolower(i16 %conv12) #6 |
|
%cmp14 = icmp eq i16 %call, %call13 |
|
br i1 %cmp14, label %while.cond, label %return.loopexit |
|
|
|
return.loopexit: ; preds = %while.cond, %while.body |
|
%retval.1.ph = phi i8 [ 0, %while.body ], [ 1, %while.cond ] |
|
br label %return |
|
|
|
return: ; preds = %return.loopexit, %if.end.5, %if.end, %entry |
|
%retval.1 = phi i8 [ 1, %entry ], [ 0, %if.end ], [ 1, %if.end.5 ], [ %retval.1.ph, %return.loopexit ] |
|
ret i8 %retval.1 |
|
} |
|
|
|
; Function Attrs: nounwind readnone |
|
declare i16 @tolower(i16) #4 |
|
|
|
; Function Attrs: nounwind readonly |
|
define zeroext i8 @_ZNK6String10startsWithERKS_(%class.String* nocapture readonly %this, %class.String* nocapture readonly dereferenceable(6) %s2) #1 align 2 { |
|
entry: |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len, align 2, !tbaa !8 |
|
%len2 = getelementptr inbounds %class.String, %class.String* %s2, i16 0, i32 2 |
|
%1 = load i16, i16* %len2, align 2, !tbaa !8 |
|
%cmp = icmp ult i16 %0, %1 |
|
br i1 %cmp, label %return, label %if.end |
|
|
|
if.end: ; preds = %entry |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%2 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i = icmp eq i8* %2, null |
|
br i1 %tobool.i, label %return, label %lor.lhs.false.3.i |
|
|
|
lor.lhs.false.3.i: ; preds = %if.end |
|
%buffer4.i = getelementptr inbounds %class.String, %class.String* %s2, i16 0, i32 0 |
|
%3 = load i8*, i8** %buffer4.i, align 2, !tbaa !1 |
|
%tobool5.i = icmp eq i8* %3, null |
|
br i1 %tobool5.i, label %return, label %if.end.i |
|
|
|
if.end.i: ; preds = %lor.lhs.false.3.i |
|
%call.i = tail call i16 @strncmp(i8* %2, i8* %3, i16 %1) #5 |
|
%cmp9.i = icmp eq i16 %call.i, 0 |
|
%conv.i = zext i1 %cmp9.i to i8 |
|
br label %return |
|
|
|
return: ; preds = %if.end.i, %lor.lhs.false.3.i, %if.end, %entry |
|
%retval.0 = phi i8 [ 0, %entry ], [ %conv.i, %if.end.i ], [ 0, %lor.lhs.false.3.i ], [ 0, %if.end ] |
|
ret i8 %retval.0 |
|
} |
|
|
|
; Function Attrs: nounwind readonly |
|
define zeroext i8 @_ZNK6String10startsWithERKS_j(%class.String* nocapture readonly %this, %class.String* nocapture readonly dereferenceable(6) %s2, i16 %offset) #1 align 2 { |
|
entry: |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len, align 2, !tbaa !8 |
|
%len2 = getelementptr inbounds %class.String, %class.String* %s2, i16 0, i32 2 |
|
%1 = load i16, i16* %len2, align 2, !tbaa !8 |
|
%sub = sub i16 %0, %1 |
|
%cmp = icmp ult i16 %sub, %offset |
|
br i1 %cmp, label %return, label %lor.lhs.false |
|
|
|
lor.lhs.false: ; preds = %entry |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%2 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%tobool = icmp eq i8* %2, null |
|
br i1 %tobool, label %return, label %lor.lhs.false.3 |
|
|
|
lor.lhs.false.3: ; preds = %lor.lhs.false |
|
%buffer4 = getelementptr inbounds %class.String, %class.String* %s2, i16 0, i32 0 |
|
%3 = load i8*, i8** %buffer4, align 2, !tbaa !1 |
|
%tobool5 = icmp eq i8* %3, null |
|
br i1 %tobool5, label %return, label %if.end |
|
|
|
if.end: ; preds = %lor.lhs.false.3 |
|
%arrayidx = getelementptr inbounds i8, i8* %2, i16 %offset |
|
%call = tail call i16 @strncmp(i8* %arrayidx, i8* %3, i16 %1) #5 |
|
%cmp9 = icmp eq i16 %call, 0 |
|
%conv = zext i1 %cmp9 to i8 |
|
br label %return |
|
|
|
return: ; preds = %entry, %lor.lhs.false, %lor.lhs.false.3, %if.end |
|
%retval.0 = phi i8 [ %conv, %if.end ], [ 0, %lor.lhs.false.3 ], [ 0, %lor.lhs.false ], [ 0, %entry ] |
|
ret i8 %retval.0 |
|
} |
|
|
|
; Function Attrs: nounwind readonly |
|
declare i16 @strncmp(i8* nocapture, i8* nocapture, i16) #1 |
|
|
|
; Function Attrs: nounwind readonly |
|
define zeroext i8 @_ZNK6String8endsWithERKS_(%class.String* nocapture readonly %this, %class.String* nocapture readonly dereferenceable(6) %s2) #1 align 2 { |
|
entry: |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len, align 2, !tbaa !8 |
|
%len2 = getelementptr inbounds %class.String, %class.String* %s2, i16 0, i32 2 |
|
%1 = load i16, i16* %len2, align 2, !tbaa !8 |
|
%cmp = icmp ult i16 %0, %1 |
|
br i1 %cmp, label %return, label %lor.lhs.false |
|
|
|
lor.lhs.false: ; preds = %entry |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%2 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%tobool = icmp eq i8* %2, null |
|
br i1 %tobool, label %return, label %lor.lhs.false.3 |
|
|
|
lor.lhs.false.3: ; preds = %lor.lhs.false |
|
%buffer4 = getelementptr inbounds %class.String, %class.String* %s2, i16 0, i32 0 |
|
%3 = load i8*, i8** %buffer4, align 2, !tbaa !1 |
|
%tobool5 = icmp eq i8* %3, null |
|
br i1 %tobool5, label %return, label %if.end |
|
|
|
if.end: ; preds = %lor.lhs.false.3 |
|
%sub = sub i16 %0, %1 |
|
%arrayidx = getelementptr inbounds i8, i8* %2, i16 %sub |
|
%call = tail call i16 @strcmp(i8* %arrayidx, i8* %3) #5 |
|
%cmp10 = icmp eq i16 %call, 0 |
|
%conv = zext i1 %cmp10 to i8 |
|
br label %return |
|
|
|
return: ; preds = %entry, %lor.lhs.false, %lor.lhs.false.3, %if.end |
|
%retval.0 = phi i8 [ %conv, %if.end ], [ 0, %lor.lhs.false.3 ], [ 0, %lor.lhs.false ], [ 0, %entry ] |
|
ret i8 %retval.0 |
|
} |
|
|
|
; Function Attrs: nounwind readonly |
|
define signext i8 @_ZNK6String6charAtEj(%class.String* nocapture readonly %this, i16 %loc) #1 align 2 { |
|
entry: |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp.i = icmp ugt i16 %0, %loc |
|
br i1 %cmp.i, label %lor.lhs.false.i, label %_ZNK6StringixEj.exit |
|
|
|
lor.lhs.false.i: ; preds = %entry |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%1 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%tobool.i = icmp eq i8* %1, null |
|
br i1 %tobool.i, label %_ZNK6StringixEj.exit, label %if.end.i |
|
|
|
if.end.i: ; preds = %lor.lhs.false.i |
|
%arrayidx.i = getelementptr inbounds i8, i8* %1, i16 %loc |
|
%2 = load i8, i8* %arrayidx.i, align 1, !tbaa !9 |
|
br label %_ZNK6StringixEj.exit |
|
|
|
_ZNK6StringixEj.exit: ; preds = %entry, %lor.lhs.false.i, %if.end.i |
|
%retval.0.i = phi i8 [ %2, %if.end.i ], [ 0, %lor.lhs.false.i ], [ 0, %entry ] |
|
ret i8 %retval.0.i |
|
} |
|
|
|
; Function Attrs: nounwind readonly |
|
define signext i8 @_ZNK6StringixEj(%class.String* nocapture readonly %this, i16 %index) #1 align 2 { |
|
entry: |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len, align 2, !tbaa !8 |
|
%cmp = icmp ugt i16 %0, %index |
|
br i1 %cmp, label %lor.lhs.false, label %return |
|
|
|
lor.lhs.false: ; preds = %entry |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%1 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%tobool = icmp eq i8* %1, null |
|
br i1 %tobool, label %return, label %if.end |
|
|
|
if.end: ; preds = %lor.lhs.false |
|
%arrayidx = getelementptr inbounds i8, i8* %1, i16 %index |
|
%2 = load i8, i8* %arrayidx, align 1, !tbaa !9 |
|
br label %return |
|
|
|
return: ; preds = %entry, %lor.lhs.false, %if.end |
|
%retval.0 = phi i8 [ %2, %if.end ], [ 0, %lor.lhs.false ], [ 0, %entry ] |
|
ret i8 %retval.0 |
|
} |
|
|
|
; Function Attrs: nounwind |
|
define void @_ZN6String9setCharAtEjc(%class.String* nocapture readonly %this, i16 %loc, i8 signext %c) #0 align 2 { |
|
entry: |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len, align 2, !tbaa !8 |
|
%cmp = icmp ugt i16 %0, %loc |
|
br i1 %cmp, label %if.then, label %if.end |
|
|
|
if.then: ; preds = %entry |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%1 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%arrayidx = getelementptr inbounds i8, i8* %1, i16 %loc |
|
store i8 %c, i8* %arrayidx, align 1, !tbaa !9 |
|
br label %if.end |
|
|
|
if.end: ; preds = %if.then, %entry |
|
ret void |
|
} |
|
|
|
; Function Attrs: nounwind |
|
define dereferenceable(1) i8* @_ZN6StringixEj(%class.String* nocapture readonly %this, i16 %index) #0 align 2 { |
|
entry: |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len, align 2, !tbaa !8 |
|
%cmp = icmp ugt i16 %0, %index |
|
br i1 %cmp, label %lor.lhs.false, label %if.then |
|
|
|
lor.lhs.false: ; preds = %entry |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%1 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%tobool = icmp eq i8* %1, null |
|
br i1 %tobool, label %if.then, label %if.end |
|
|
|
if.then: ; preds = %lor.lhs.false, %entry |
|
store i8 0, i8* @_ZZN6StringixEjE19dummy_writable_char, align 1, !tbaa !9 |
|
br label %return |
|
|
|
if.end: ; preds = %lor.lhs.false |
|
%arrayidx = getelementptr inbounds i8, i8* %1, i16 %index |
|
br label %return |
|
|
|
return: ; preds = %if.end, %if.then |
|
%retval.0 = phi i8* [ @_ZZN6StringixEjE19dummy_writable_char, %if.then ], [ %arrayidx, %if.end ] |
|
ret i8* %retval.0 |
|
} |
|
|
|
; Function Attrs: nounwind |
|
define void @_ZNK6String8getBytesEPhjj(%class.String* nocapture readonly %this, i8* %buf, i16 %bufsize, i16 %index) #0 align 2 { |
|
entry: |
|
%tobool = icmp ne i16 %bufsize, 0 |
|
%tobool2 = icmp ne i8* %buf, null |
|
%or.cond = and i1 %tobool2, %tobool |
|
br i1 %or.cond, label %if.end, label %return |
|
|
|
if.end: ; preds = %entry |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len, align 2, !tbaa !8 |
|
%cmp = icmp ugt i16 %0, %index |
|
br i1 %cmp, label %if.end.4, label %if.then.3 |
|
|
|
if.then.3: ; preds = %if.end |
|
store i8 0, i8* %buf, align 1, !tbaa !9 |
|
br label %return |
|
|
|
if.end.4: ; preds = %if.end |
|
%sub = add i16 %bufsize, -1 |
|
%sub6 = sub i16 %0, %index |
|
%cmp7 = icmp ugt i16 %sub, %sub6 |
|
%sub6.sub = select i1 %cmp7, i16 %sub6, i16 %sub |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%1 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%add.ptr = getelementptr inbounds i8, i8* %1, i16 %index |
|
%call = tail call i8* @strncpy(i8* %buf, i8* %add.ptr, i16 %sub6.sub) |
|
%arrayidx12 = getelementptr inbounds i8, i8* %buf, i16 %sub6.sub |
|
store i8 0, i8* %arrayidx12, align 1, !tbaa !9 |
|
br label %return |
|
|
|
return: ; preds = %entry, %if.end.4, %if.then.3 |
|
ret void |
|
} |
|
|
|
; Function Attrs: nounwind |
|
declare i8* @strncpy(i8*, i8* nocapture readonly, i16) #0 |
|
|
|
; Function Attrs: nounwind readonly |
|
define i16 @_ZNK6String7indexOfEc(%class.String* nocapture readonly %this, i8 signext %c) #1 align 2 { |
|
entry: |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp.i = icmp eq i16 %0, 0 |
|
br i1 %cmp.i, label %_ZNK6String7indexOfEcj.exit, label %if.end.i |
|
|
|
if.end.i: ; preds = %entry |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%1 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%conv.i = sext i8 %c to i16 |
|
%call.i = tail call i8* @strchr(i8* %1, i16 %conv.i) #5 |
|
%cmp2.i = icmp eq i8* %call.i, null |
|
br i1 %cmp2.i, label %_ZNK6String7indexOfEcj.exit, label %if.end.4.i |
|
|
|
if.end.4.i: ; preds = %if.end.i |
|
%sub.ptr.lhs.cast.i = ptrtoint i8* %call.i to i16 |
|
%sub.ptr.rhs.cast.i = ptrtoint i8* %1 to i16 |
|
%sub.ptr.sub.i = sub i16 %sub.ptr.lhs.cast.i, %sub.ptr.rhs.cast.i |
|
br label %_ZNK6String7indexOfEcj.exit |
|
|
|
_ZNK6String7indexOfEcj.exit: ; preds = %entry, %if.end.i, %if.end.4.i |
|
%retval.1.i = phi i16 [ -1, %entry ], [ %sub.ptr.sub.i, %if.end.4.i ], [ -1, %if.end.i ] |
|
ret i16 %retval.1.i |
|
} |
|
|
|
; Function Attrs: nounwind readonly |
|
define i16 @_ZNK6String7indexOfEcj(%class.String* nocapture readonly %this, i8 signext %ch, i16 %fromIndex) #1 align 2 { |
|
entry: |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len, align 2, !tbaa !8 |
|
%cmp = icmp ugt i16 %0, %fromIndex |
|
br i1 %cmp, label %if.end, label %return |
|
|
|
if.end: ; preds = %entry |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%1 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%add.ptr = getelementptr inbounds i8, i8* %1, i16 %fromIndex |
|
%conv = sext i8 %ch to i16 |
|
%call = tail call i8* @strchr(i8* %add.ptr, i16 %conv) #5 |
|
%cmp2 = icmp eq i8* %call, null |
|
br i1 %cmp2, label %return, label %if.end.4 |
|
|
|
if.end.4: ; preds = %if.end |
|
%sub.ptr.lhs.cast = ptrtoint i8* %call to i16 |
|
%sub.ptr.rhs.cast = ptrtoint i8* %1 to i16 |
|
%sub.ptr.sub = sub i16 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast |
|
br label %return |
|
|
|
return: ; preds = %if.end.4, %if.end, %entry |
|
%retval.1 = phi i16 [ -1, %entry ], [ %sub.ptr.sub, %if.end.4 ], [ -1, %if.end ] |
|
ret i16 %retval.1 |
|
} |
|
|
|
; Function Attrs: nounwind readonly |
|
declare i8* @strchr(i8*, i16) #1 |
|
|
|
; Function Attrs: nounwind readonly |
|
define i16 @_ZNK6String7indexOfERKS_(%class.String* nocapture readonly %this, %class.String* nocapture readonly dereferenceable(6) %s2) #1 align 2 { |
|
entry: |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp.i = icmp eq i16 %0, 0 |
|
br i1 %cmp.i, label %_ZNK6String7indexOfERKS_j.exit, label %if.end.i |
|
|
|
if.end.i: ; preds = %entry |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%1 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%buffer2.i = getelementptr inbounds %class.String, %class.String* %s2, i16 0, i32 0 |
|
%2 = load i8*, i8** %buffer2.i, align 2, !tbaa !1 |
|
%call.i = tail call i8* @strstr(i8* %1, i8* %2) #5 |
|
%cmp3.i = icmp eq i8* %call.i, null |
|
br i1 %cmp3.i, label %_ZNK6String7indexOfERKS_j.exit, label %if.end.5.i |
|
|
|
if.end.5.i: ; preds = %if.end.i |
|
%sub.ptr.lhs.cast.i = ptrtoint i8* %call.i to i16 |
|
%sub.ptr.rhs.cast.i = ptrtoint i8* %1 to i16 |
|
%sub.ptr.sub.i = sub i16 %sub.ptr.lhs.cast.i, %sub.ptr.rhs.cast.i |
|
br label %_ZNK6String7indexOfERKS_j.exit |
|
|
|
_ZNK6String7indexOfERKS_j.exit: ; preds = %entry, %if.end.i, %if.end.5.i |
|
%retval.1.i = phi i16 [ -1, %entry ], [ %sub.ptr.sub.i, %if.end.5.i ], [ -1, %if.end.i ] |
|
ret i16 %retval.1.i |
|
} |
|
|
|
; Function Attrs: nounwind readonly |
|
define i16 @_ZNK6String7indexOfERKS_j(%class.String* nocapture readonly %this, %class.String* nocapture readonly dereferenceable(6) %s2, i16 %fromIndex) #1 align 2 { |
|
entry: |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len, align 2, !tbaa !8 |
|
%cmp = icmp ugt i16 %0, %fromIndex |
|
br i1 %cmp, label %if.end, label %return |
|
|
|
if.end: ; preds = %entry |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%1 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%add.ptr = getelementptr inbounds i8, i8* %1, i16 %fromIndex |
|
%buffer2 = getelementptr inbounds %class.String, %class.String* %s2, i16 0, i32 0 |
|
%2 = load i8*, i8** %buffer2, align 2, !tbaa !1 |
|
%call = tail call i8* @strstr(i8* %add.ptr, i8* %2) #5 |
|
%cmp3 = icmp eq i8* %call, null |
|
br i1 %cmp3, label %return, label %if.end.5 |
|
|
|
if.end.5: ; preds = %if.end |
|
%sub.ptr.lhs.cast = ptrtoint i8* %call to i16 |
|
%sub.ptr.rhs.cast = ptrtoint i8* %1 to i16 |
|
%sub.ptr.sub = sub i16 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast |
|
br label %return |
|
|
|
return: ; preds = %if.end.5, %if.end, %entry |
|
%retval.1 = phi i16 [ -1, %entry ], [ %sub.ptr.sub, %if.end.5 ], [ -1, %if.end ] |
|
ret i16 %retval.1 |
|
} |
|
|
|
; Function Attrs: nounwind readonly |
|
declare i8* @strstr(i8*, i8* nocapture) #1 |
|
|
|
; Function Attrs: nounwind |
|
define i16 @_ZNK6String11lastIndexOfEc(%class.String* nocapture readonly %this, i8 signext %theChar) #0 align 2 { |
|
entry: |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len, align 2, !tbaa !8 |
|
%cmp.i = icmp eq i16 %0, 0 |
|
br i1 %cmp.i, label %_ZNK6String11lastIndexOfEcj.exit, label %if.end.i |
|
|
|
if.end.i: ; preds = %entry |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%1 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%arrayidx.i = getelementptr inbounds i8, i8* %1, i16 %0 |
|
%2 = load i8, i8* %arrayidx.i, align 1, !tbaa !9 |
|
store i8 0, i8* %arrayidx.i, align 1, !tbaa !9 |
|
%3 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%conv.i = sext i8 %theChar to i16 |
|
%call.i = tail call i8* @strrchr(i8* %3, i16 %conv.i) #5 |
|
%arrayidx8.i = getelementptr inbounds i8, i8* %3, i16 %0 |
|
store i8 %2, i8* %arrayidx8.i, align 1, !tbaa !9 |
|
%cmp9.i = icmp eq i8* %call.i, null |
|
br i1 %cmp9.i, label %_ZNK6String11lastIndexOfEcj.exit, label %if.end.11.i |
|
|
|
if.end.11.i: ; preds = %if.end.i |
|
%4 = bitcast %class.String* %this to i16* |
|
%5 = load i16, i16* %4, align 2, !tbaa !1 |
|
%sub.ptr.lhs.cast.i = ptrtoint i8* %call.i to i16 |
|
%sub.ptr.sub.i = sub i16 %sub.ptr.lhs.cast.i, %5 |
|
br label %_ZNK6String11lastIndexOfEcj.exit |
|
|
|
_ZNK6String11lastIndexOfEcj.exit: ; preds = %entry, %if.end.i, %if.end.11.i |
|
%retval.1.i = phi i16 [ -1, %entry ], [ %sub.ptr.sub.i, %if.end.11.i ], [ -1, %if.end.i ] |
|
ret i16 %retval.1.i |
|
} |
|
|
|
; Function Attrs: nounwind |
|
define i16 @_ZNK6String11lastIndexOfEcj(%class.String* nocapture readonly %this, i8 signext %ch, i16 %fromIndex) #0 align 2 { |
|
entry: |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len, align 2, !tbaa !8 |
|
%cmp = icmp ugt i16 %0, %fromIndex |
|
br i1 %cmp, label %if.end, label %return |
|
|
|
if.end: ; preds = %entry |
|
%add = add i16 %fromIndex, 1 |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%1 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%arrayidx = getelementptr inbounds i8, i8* %1, i16 %add |
|
%2 = load i8, i8* %arrayidx, align 1, !tbaa !9 |
|
store i8 0, i8* %arrayidx, align 1, !tbaa !9 |
|
%3 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%conv = sext i8 %ch to i16 |
|
%call = tail call i8* @strrchr(i8* %3, i16 %conv) #5 |
|
%arrayidx8 = getelementptr inbounds i8, i8* %3, i16 %add |
|
store i8 %2, i8* %arrayidx8, align 1, !tbaa !9 |
|
%cmp9 = icmp eq i8* %call, null |
|
br i1 %cmp9, label %return, label %if.end.11 |
|
|
|
if.end.11: ; preds = %if.end |
|
%4 = bitcast %class.String* %this to i16* |
|
%5 = load i16, i16* %4, align 2, !tbaa !1 |
|
%sub.ptr.lhs.cast = ptrtoint i8* %call to i16 |
|
%sub.ptr.sub = sub i16 %sub.ptr.lhs.cast, %5 |
|
br label %return |
|
|
|
return: ; preds = %if.end.11, %if.end, %entry |
|
%retval.1 = phi i16 [ -1, %entry ], [ %sub.ptr.sub, %if.end.11 ], [ -1, %if.end ] |
|
ret i16 %retval.1 |
|
} |
|
|
|
; Function Attrs: nounwind readonly |
|
declare i8* @strrchr(i8*, i16) #1 |
|
|
|
; Function Attrs: nounwind readonly |
|
define i16 @_ZNK6String11lastIndexOfERKS_(%class.String* nocapture readonly %this, %class.String* nocapture readonly dereferenceable(6) %s2) #1 align 2 { |
|
entry: |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len, align 2, !tbaa !8 |
|
%len2 = getelementptr inbounds %class.String, %class.String* %s2, i16 0, i32 2 |
|
%1 = load i16, i16* %len2, align 2, !tbaa !8 |
|
%sub = sub i16 %0, %1 |
|
%cmp.i = icmp eq i16 %1, 0 |
|
br i1 %cmp.i, label %_ZNK6String11lastIndexOfERKS_j.exit, label %lor.lhs.false.i |
|
|
|
lor.lhs.false.i: ; preds = %entry |
|
%cmp3.i = icmp eq i16 %0, 0 |
|
%cmp7.i = icmp ult i16 %0, %1 |
|
%or.cond.i = or i1 %cmp3.i, %cmp7.i |
|
br i1 %or.cond.i, label %_ZNK6String11lastIndexOfERKS_j.exit, label %if.end.i |
|
|
|
if.end.i: ; preds = %lor.lhs.false.i |
|
%cmp9.i = icmp ugt i16 %0, %sub |
|
%sub.i = add i16 %0, -1 |
|
%fromIndex.sub.i = select i1 %cmp9.i, i16 %sub, i16 %sub.i |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%2 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%cmp14.39.i = icmp slt i16 %fromIndex.sub.i, 0 |
|
br i1 %cmp14.39.i, label %_ZNK6String11lastIndexOfERKS_j.exit, label %for.body.lr.ph.i |
|
|
|
for.body.lr.ph.i: ; preds = %if.end.i |
|
%buffer15.i = getelementptr inbounds %class.String, %class.String* %s2, i16 0, i32 0 |
|
%3 = load i8*, i8** %buffer15.i, align 2, !tbaa !1 |
|
%sub.ptr.rhs.cast.i = ptrtoint i8* %2 to i16 |
|
%add.ptr.i = getelementptr inbounds i8, i8* %2, i16 %fromIndex.sub.i |
|
br label %for.body.i |
|
|
|
for.body.i: ; preds = %if.end.17.i, %for.body.lr.ph.i |
|
%p.041.i = phi i8* [ %2, %for.body.lr.ph.i ], [ %incdec.ptr.i, %if.end.17.i ] |
|
%found.040.i = phi i16 [ -1, %for.body.lr.ph.i ], [ %found.0.sub.ptr.sub.i, %if.end.17.i ] |
|
%call.i = tail call i8* @strstr(i8* %p.041.i, i8* %3) #5 |
|
%tobool.i = icmp eq i8* %call.i, null |
|
br i1 %tobool.i, label %_ZNK6String11lastIndexOfERKS_j.exit.loopexit, label %if.end.17.i |
|
|
|
if.end.17.i: ; preds = %for.body.i |
|
%sub.ptr.lhs.cast.i = ptrtoint i8* %call.i to i16 |
|
%sub.ptr.sub.i = sub i16 %sub.ptr.lhs.cast.i, %sub.ptr.rhs.cast.i |
|
%cmp19.i = icmp ugt i16 %sub.ptr.sub.i, %fromIndex.sub.i |
|
%found.0.sub.ptr.sub.i = select i1 %cmp19.i, i16 %found.040.i, i16 %sub.ptr.sub.i |
|
%incdec.ptr.i = getelementptr inbounds i8, i8* %call.i, i16 1 |
|
%cmp14.i = icmp ugt i8* %incdec.ptr.i, %add.ptr.i |
|
br i1 %cmp14.i, label %_ZNK6String11lastIndexOfERKS_j.exit.loopexit, label %for.body.i |
|
|
|
_ZNK6String11lastIndexOfERKS_j.exit.loopexit: ; preds = %if.end.17.i, %for.body.i |
|
%retval.0.i.ph = phi i16 [ %found.0.sub.ptr.sub.i, %if.end.17.i ], [ %found.040.i, %for.body.i ] |
|
br label %_ZNK6String11lastIndexOfERKS_j.exit |
|
|
|
_ZNK6String11lastIndexOfERKS_j.exit: ; preds = %_ZNK6String11lastIndexOfERKS_j.exit.loopexit, %entry, %lor.lhs.false.i, %if.end.i |
|
%retval.0.i = phi i16 [ -1, %lor.lhs.false.i ], [ -1, %entry ], [ -1, %if.end.i ], [ %retval.0.i.ph, %_ZNK6String11lastIndexOfERKS_j.exit.loopexit ] |
|
ret i16 %retval.0.i |
|
} |
|
|
|
; Function Attrs: nounwind readonly |
|
define i16 @_ZNK6String11lastIndexOfERKS_j(%class.String* nocapture readonly %this, %class.String* nocapture readonly dereferenceable(6) %s2, i16 %fromIndex) #1 align 2 { |
|
entry: |
|
%len = getelementptr inbounds %class.String, %class.String* %s2, i16 0, i32 2 |
|
%0 = load i16, i16* %len, align 2, !tbaa !8 |
|
%cmp = icmp eq i16 %0, 0 |
|
br i1 %cmp, label %return, label %lor.lhs.false |
|
|
|
lor.lhs.false: ; preds = %entry |
|
%len2 = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%1 = load i16, i16* %len2, align 2, !tbaa !8 |
|
%cmp3 = icmp eq i16 %1, 0 |
|
%cmp7 = icmp ugt i16 %0, %1 |
|
%or.cond = or i1 %cmp3, %cmp7 |
|
br i1 %or.cond, label %return, label %if.end |
|
|
|
if.end: ; preds = %lor.lhs.false |
|
%cmp9 = icmp ugt i16 %1, %fromIndex |
|
%sub = add i16 %1, -1 |
|
%fromIndex.sub = select i1 %cmp9, i16 %fromIndex, i16 %sub |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%2 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%cmp14.39 = icmp slt i16 %fromIndex.sub, 0 |
|
br i1 %cmp14.39, label %return, label %for.body.lr.ph |
|
|
|
for.body.lr.ph: ; preds = %if.end |
|
%buffer15 = getelementptr inbounds %class.String, %class.String* %s2, i16 0, i32 0 |
|
%3 = load i8*, i8** %buffer15, align 2, !tbaa !1 |
|
%sub.ptr.rhs.cast = ptrtoint i8* %2 to i16 |
|
%add.ptr = getelementptr inbounds i8, i8* %2, i16 %fromIndex.sub |
|
br label %for.body |
|
|
|
for.body: ; preds = %for.body.lr.ph, %if.end.17 |
|
%p.041 = phi i8* [ %2, %for.body.lr.ph ], [ %incdec.ptr, %if.end.17 ] |
|
%found.040 = phi i16 [ -1, %for.body.lr.ph ], [ %found.0.sub.ptr.sub, %if.end.17 ] |
|
%call = tail call i8* @strstr(i8* %p.041, i8* %3) #5 |
|
%tobool = icmp eq i8* %call, null |
|
br i1 %tobool, label %return.loopexit, label %if.end.17 |
|
|
|
if.end.17: ; preds = %for.body |
|
%sub.ptr.lhs.cast = ptrtoint i8* %call to i16 |
|
%sub.ptr.sub = sub i16 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast |
|
%cmp19 = icmp ugt i16 %sub.ptr.sub, %fromIndex.sub |
|
%found.0.sub.ptr.sub = select i1 %cmp19, i16 %found.040, i16 %sub.ptr.sub |
|
%incdec.ptr = getelementptr inbounds i8, i8* %call, i16 1 |
|
%cmp14 = icmp ugt i8* %incdec.ptr, %add.ptr |
|
br i1 %cmp14, label %return.loopexit, label %for.body |
|
|
|
return.loopexit: ; preds = %if.end.17, %for.body |
|
%retval.0.ph = phi i16 [ %found.0.sub.ptr.sub, %if.end.17 ], [ %found.040, %for.body ] |
|
br label %return |
|
|
|
return: ; preds = %return.loopexit, %if.end, %entry, %lor.lhs.false |
|
%retval.0 = phi i16 [ -1, %lor.lhs.false ], [ -1, %entry ], [ -1, %if.end ], [ %retval.0.ph, %return.loopexit ] |
|
ret i16 %retval.0 |
|
} |
|
|
|
define void @_ZNK6String9substringEjj(%class.String* noalias sret %agg.result, %class.String* nocapture readonly %this, i16 %left, i16 %right) #2 align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { |
|
entry: |
|
%cmp = icmp ugt i16 %left, %right |
|
%left.right = select i1 %cmp, i16 %left, i16 %right |
|
%right.left = select i1 %cmp, i16 %right, i16 %left |
|
tail call void @_ZN6StringC2EPKc(%class.String* %agg.result, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i16 0, i16 0)) |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len, align 2, !tbaa !8 |
|
%cmp2 = icmp ult i16 %right.left, %0 |
|
br i1 %cmp2, label %invoke.cont, label %nrvo.skipdtor |
|
|
|
invoke.cont: ; preds = %entry |
|
%cmp6 = icmp ugt i16 %left.right, %0 |
|
%.left.right = select i1 %cmp6, i16 %0, i16 %left.right |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%1 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%arrayidx = getelementptr inbounds i8, i8* %1, i16 %.left.right |
|
%2 = load i8, i8* %arrayidx, align 1, !tbaa !9 |
|
store i8 0, i8* %arrayidx, align 1, !tbaa !9 |
|
%3 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%add.ptr = getelementptr inbounds i8, i8* %3, i16 %right.left |
|
%call = tail call dereferenceable(6) %class.String* @_ZN6StringaSEPKc(%class.String* %agg.result, i8* %add.ptr) |
|
%4 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%arrayidx15 = getelementptr inbounds i8, i8* %4, i16 %.left.right |
|
store i8 %2, i8* %arrayidx15, align 1, !tbaa !9 |
|
br label %nrvo.skipdtor |
|
|
|
nrvo.skipdtor: ; preds = %invoke.cont, %entry |
|
ret void |
|
} |
|
|
|
declare i32 @__gxx_personality_v0(...) |
|
|
|
; Function Attrs: nounwind |
|
define void @_ZN6String7replaceEcc(%class.String* nocapture readonly %this, i8 signext %find, i8 signext %replace) #0 align 2 { |
|
entry: |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%0 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%tobool = icmp eq i8* %0, null |
|
br i1 %tobool, label %for.end, label %for.cond.preheader |
|
|
|
for.cond.preheader: ; preds = %entry |
|
%1 = load i8, i8* %0, align 1, !tbaa !9 |
|
%tobool3.11 = icmp eq i8 %1, 0 |
|
br i1 %tobool3.11, label %for.end, label %for.body.preheader |
|
|
|
for.body.preheader: ; preds = %for.cond.preheader |
|
br label %for.body |
|
|
|
for.body: ; preds = %for.body.preheader, %for.inc |
|
%2 = phi i8 [ %3, %for.inc ], [ %1, %for.body.preheader ] |
|
%p.012 = phi i8* [ %incdec.ptr, %for.inc ], [ %0, %for.body.preheader ] |
|
%cmp = icmp eq i8 %2, %find |
|
br i1 %cmp, label %if.then.5, label %for.inc |
|
|
|
if.then.5: ; preds = %for.body |
|
store i8 %replace, i8* %p.012, align 1, !tbaa !9 |
|
br label %for.inc |
|
|
|
for.inc: ; preds = %for.body, %if.then.5 |
|
%incdec.ptr = getelementptr inbounds i8, i8* %p.012, i16 1 |
|
%3 = load i8, i8* %incdec.ptr, align 1, !tbaa !9 |
|
%tobool3 = icmp eq i8 %3, 0 |
|
br i1 %tobool3, label %for.end.loopexit, label %for.body |
|
|
|
for.end.loopexit: ; preds = %for.inc |
|
br label %for.end |
|
|
|
for.end: ; preds = %for.end.loopexit, %for.cond.preheader, %entry |
|
ret void |
|
} |
|
|
|
; Function Attrs: nounwind |
|
define void @_ZN6String7replaceERKS_S1_(%class.String* nocapture %this, %class.String* nocapture readonly dereferenceable(6) %find, %class.String* nocapture readonly dereferenceable(6) %replace) #0 align 2 { |
|
entry: |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len, align 2, !tbaa !8 |
|
%cmp = icmp eq i16 %0, 0 |
|
br i1 %cmp, label %cleanup.cont.83, label %lor.lhs.false |
|
|
|
lor.lhs.false: ; preds = %entry |
|
%len2 = getelementptr inbounds %class.String, %class.String* %find, i16 0, i32 2 |
|
%1 = load i16, i16* %len2, align 2, !tbaa !8 |
|
%cmp3 = icmp eq i16 %1, 0 |
|
br i1 %cmp3, label %cleanup.cont.83, label %if.end |
|
|
|
if.end: ; preds = %lor.lhs.false |
|
%len4 = getelementptr inbounds %class.String, %class.String* %replace, i16 0, i32 2 |
|
%2 = load i16, i16* %len4, align 2, !tbaa !8 |
|
%sub = sub i16 %2, %1 |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%3 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%cmp6 = icmp eq i16 %2, %1 |
|
br i1 %cmp6, label %while.cond.preheader, label %if.else |
|
|
|
while.cond.preheader: ; preds = %if.end |
|
%buffer8 = getelementptr inbounds %class.String, %class.String* %find, i16 0, i32 0 |
|
%4 = load i8*, i8** %buffer8, align 2, !tbaa !1 |
|
%call.145 = tail call i8* @strstr(i8* %3, i8* %4) #5 |
|
%cmp9.146 = icmp eq i8* %call.145, null |
|
br i1 %cmp9.146, label %cleanup.cont.83, label %while.body.lr.ph |
|
|
|
while.body.lr.ph: ; preds = %while.cond.preheader |
|
%buffer10 = getelementptr inbounds %class.String, %class.String* %replace, i16 0, i32 0 |
|
br label %while.body |
|
|
|
while.body: ; preds = %while.body.lr.ph, %while.body |
|
%5 = phi i16 [ %1, %while.body.lr.ph ], [ %7, %while.body ] |
|
%call147 = phi i8* [ %call.145, %while.body.lr.ph ], [ %call, %while.body ] |
|
%6 = load i8*, i8** %buffer10, align 2, !tbaa !1 |
|
tail call void @llvm.memcpy.p0i8.p0i8.i16(i8* %call147, i8* %6, i16 %5, i32 1, i1 false) |
|
%7 = load i16, i16* %len4, align 2, !tbaa !8 |
|
%add.ptr = getelementptr inbounds i8, i8* %call147, i16 %7 |
|
%8 = load i8*, i8** %buffer8, align 2, !tbaa !1 |
|
%call = tail call i8* @strstr(i8* %add.ptr, i8* %8) #5 |
|
%cmp9 = icmp eq i8* %call, null |
|
br i1 %cmp9, label %cleanup.cont.83.loopexit, label %while.body |
|
|
|
if.else: ; preds = %if.end |
|
%cmp13 = icmp slt i16 %sub, 0 |
|
%buffer17 = getelementptr inbounds %class.String, %class.String* %find, i16 0, i32 0 |
|
%9 = load i8*, i8** %buffer17, align 2, !tbaa !1 |
|
%call18.148 = tail call i8* @strstr(i8* %3, i8* %9) #5 |
|
%cmp19.149 = icmp eq i8* %call18.148, null |
|
br i1 %cmp13, label %while.cond.16.preheader, label %while.cond.33.preheader |
|
|
|
while.cond.33.preheader: ; preds = %if.else |
|
br i1 %cmp19.149, label %cleanup.cont.83, label %while.body.37.preheader |
|
|
|
while.body.37.preheader: ; preds = %while.cond.33.preheader |
|
br label %while.body.37 |
|
|
|
while.cond.16.preheader: ; preds = %if.else |
|
br i1 %cmp19.149, label %while.end.29, label %while.body.20.lr.ph |
|
|
|
while.body.20.lr.ph: ; preds = %while.cond.16.preheader |
|
%buffer22 = getelementptr inbounds %class.String, %class.String* %replace, i16 0, i32 0 |
|
br label %while.body.20 |
|
|
|
while.body.20: ; preds = %while.body.20.lr.ph, %while.body.20 |
|
%call18152 = phi i8* [ %call18.148, %while.body.20.lr.ph ], [ %call18, %while.body.20 ] |
|
%readFrom.1151 = phi i8* [ %3, %while.body.20.lr.ph ], [ %add.ptr27, %while.body.20 ] |
|
%writeTo.0150 = phi i8* [ %3, %while.body.20.lr.ph ], [ %add.ptr25, %while.body.20 ] |
|
%sub.ptr.lhs.cast = ptrtoint i8* %call18152 to i16 |
|
%sub.ptr.rhs.cast = ptrtoint i8* %readFrom.1151 to i16 |
|
%sub.ptr.sub = sub i16 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast |
|
tail call void @llvm.memcpy.p0i8.p0i8.i16(i8* %writeTo.0150, i8* %readFrom.1151, i16 %sub.ptr.sub, i32 1, i1 false) |
|
%add.ptr21 = getelementptr inbounds i8, i8* %writeTo.0150, i16 %sub.ptr.sub |
|
%10 = load i8*, i8** %buffer22, align 2, !tbaa !1 |
|
%11 = load i16, i16* %len4, align 2, !tbaa !8 |
|
tail call void @llvm.memcpy.p0i8.p0i8.i16(i8* %add.ptr21, i8* %10, i16 %11, i32 1, i1 false) |
|
%12 = load i16, i16* %len4, align 2, !tbaa !8 |
|
%add.ptr25 = getelementptr inbounds i8, i8* %add.ptr21, i16 %12 |
|
%13 = load i16, i16* %len2, align 2, !tbaa !8 |
|
%add.ptr27 = getelementptr inbounds i8, i8* %call18152, i16 %13 |
|
%14 = load i16, i16* %len, align 2, !tbaa !8 |
|
%add = add i16 %14, %sub |
|
store i16 %add, i16* %len, align 2, !tbaa !8 |
|
%15 = load i8*, i8** %buffer17, align 2, !tbaa !1 |
|
%call18 = tail call i8* @strstr(i8* %add.ptr27, i8* %15) #5 |
|
%cmp19 = icmp eq i8* %call18, null |
|
br i1 %cmp19, label %while.end.29.loopexit, label %while.body.20 |
|
|
|
while.end.29.loopexit: ; preds = %while.body.20 |
|
%add.ptr27.lcssa = phi i8* [ %add.ptr27, %while.body.20 ] |
|
%add.ptr25.lcssa = phi i8* [ %add.ptr25, %while.body.20 ] |
|
br label %while.end.29 |
|
|
|
while.end.29: ; preds = %while.end.29.loopexit, %while.cond.16.preheader |
|
%readFrom.1.lcssa = phi i8* [ %3, %while.cond.16.preheader ], [ %add.ptr27.lcssa, %while.end.29.loopexit ] |
|
%writeTo.0.lcssa = phi i8* [ %3, %while.cond.16.preheader ], [ %add.ptr25.lcssa, %while.end.29.loopexit ] |
|
%call30 = tail call i8* @strcpy(i8* %writeTo.0.lcssa, i8* %readFrom.1.lcssa) |
|
br label %cleanup.cont.83 |
|
|
|
while.body.37: ; preds = %while.body.37.preheader, %while.body.37 |
|
%call35160 = phi i8* [ %call35, %while.body.37 ], [ %call18.148, %while.body.37.preheader ] |
|
%size.0159 = phi i16 [ %add40, %while.body.37 ], [ %0, %while.body.37.preheader ] |
|
%add.ptr39 = getelementptr inbounds i8, i8* %call35160, i16 %1 |
|
%add40 = add i16 %size.0159, %sub |
|
%call35 = tail call i8* @strstr(i8* %add.ptr39, i8* %9) #5 |
|
%cmp36 = icmp eq i8* %call35, null |
|
br i1 %cmp36, label %while.end.41, label %while.body.37 |
|
|
|
while.end.41: ; preds = %while.body.37 |
|
%add40.lcssa = phi i16 [ %add40, %while.body.37 ] |
|
%cmp43 = icmp eq i16 %add40.lcssa, %0 |
|
br i1 %cmp43, label %cleanup.cont.83, label %if.end.45 |
|
|
|
if.end.45: ; preds = %while.end.41 |
|
%capacity = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 1 |
|
%16 = load i16, i16* %capacity, align 2, !tbaa !7 |
|
%cmp46 = icmp ugt i16 %add40.lcssa, %16 |
|
br i1 %cmp46, label %land.lhs.true, label %if.end.49 |
|
|
|
land.lhs.true: ; preds = %if.end.45 |
|
%add.i = add i16 %add40.lcssa, 1 |
|
%call.i = tail call noalias i8* @realloc(i8* %3, i16 %add.i) #3 |
|
%tobool.i = icmp eq i8* %call.i, null |
|
br i1 %tobool.i, label %cleanup.cont.83, label %_ZN6String12changeBufferEj.exit |
|
|
|
_ZN6String12changeBufferEj.exit: ; preds = %land.lhs.true |
|
store i8* %call.i, i8** %buffer, align 2, !tbaa !1 |
|
store i16 %add40.lcssa, i16* %capacity, align 2, !tbaa !7 |
|
%.pre = load i16, i16* %len, align 2, !tbaa !8 |
|
br label %if.end.49 |
|
|
|
if.end.49: ; preds = %_ZN6String12changeBufferEj.exit, %if.end.45 |
|
%17 = phi i16 [ %.pre, %_ZN6String12changeBufferEj.exit ], [ %0, %if.end.45 ] |
|
%index.0.154 = add i16 %17, -1 |
|
%cmp53.155 = icmp sgt i16 %index.0.154, -1 |
|
br i1 %cmp53.155, label %land.rhs.lr.ph, label %cleanup.cont.83 |
|
|
|
land.rhs.lr.ph: ; preds = %if.end.49 |
|
%buffer74 = getelementptr inbounds %class.String, %class.String* %replace, i16 0, i32 0 |
|
br label %land.rhs |
|
|
|
land.rhs: ; preds = %land.rhs.lr.ph, %while.body.56 |
|
%index.0156 = phi i16 [ %index.0.154, %land.rhs.lr.ph ], [ %index.0, %while.body.56 ] |
|
%18 = load i16, i16* %len2, align 2, !tbaa !8 |
|
%cmp.i = icmp eq i16 %18, 0 |
|
br i1 %cmp.i, label %cleanup.cont.83.loopexit166, label %lor.lhs.false.i |
|
|
|
lor.lhs.false.i: ; preds = %land.rhs |
|
%19 = load i16, i16* %len, align 2, !tbaa !8 |
|
%cmp3.i = icmp eq i16 %19, 0 |
|
%cmp7.i = icmp ugt i16 %18, %19 |
|
%or.cond.i = or i1 %cmp3.i, %cmp7.i |
|
br i1 %or.cond.i, label %cleanup.cont.83.loopexit166, label %if.end.i |
|
|
|
if.end.i: ; preds = %lor.lhs.false.i |
|
%cmp9.i = icmp ugt i16 %19, %index.0156 |
|
%sub.i = add i16 %19, -1 |
|
%fromIndex.sub.i = select i1 %cmp9.i, i16 %index.0156, i16 %sub.i |
|
%20 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%cmp14.39.i = icmp slt i16 %fromIndex.sub.i, 0 |
|
br i1 %cmp14.39.i, label %cleanup.cont.83.loopexit166, label %for.body.lr.ph.i |
|
|
|
for.body.lr.ph.i: ; preds = %if.end.i |
|
%21 = load i8*, i8** %buffer17, align 2, !tbaa !1 |
|
%sub.ptr.rhs.cast.i = ptrtoint i8* %20 to i16 |
|
%add.ptr.i = getelementptr inbounds i8, i8* %20, i16 %fromIndex.sub.i |
|
br label %for.body.i |
|
|
|
for.body.i: ; preds = %if.end.17.i, %for.body.lr.ph.i |
|
%p.041.i = phi i8* [ %20, %for.body.lr.ph.i ], [ %incdec.ptr.i, %if.end.17.i ] |
|
%found.040.i = phi i16 [ -1, %for.body.lr.ph.i ], [ %found.0.sub.ptr.sub.i, %if.end.17.i ] |
|
%call.i.139 = tail call i8* @strstr(i8* %p.041.i, i8* %21) #5 |
|
%tobool.i.140 = icmp eq i8* %call.i.139, null |
|
br i1 %tobool.i.140, label %_ZNK6String11lastIndexOfERKS_j.exit, label %if.end.17.i |
|
|
|
if.end.17.i: ; preds = %for.body.i |
|
%sub.ptr.lhs.cast.i = ptrtoint i8* %call.i.139 to i16 |
|
%sub.ptr.sub.i = sub i16 %sub.ptr.lhs.cast.i, %sub.ptr.rhs.cast.i |
|
%cmp19.i = icmp ugt i16 %sub.ptr.sub.i, %fromIndex.sub.i |
|
%found.0.sub.ptr.sub.i = select i1 %cmp19.i, i16 %found.040.i, i16 %sub.ptr.sub.i |
|
%incdec.ptr.i = getelementptr inbounds i8, i8* %call.i.139, i16 1 |
|
%cmp14.i = icmp ugt i8* %incdec.ptr.i, %add.ptr.i |
|
br i1 %cmp14.i, label %_ZNK6String11lastIndexOfERKS_j.exit, label %for.body.i |
|
|
|
_ZNK6String11lastIndexOfERKS_j.exit: ; preds = %for.body.i, %if.end.17.i |
|
%retval.0.i.141 = phi i16 [ %found.0.sub.ptr.sub.i, %if.end.17.i ], [ %found.040.i, %for.body.i ] |
|
%cmp55 = icmp sgt i16 %retval.0.i.141, -1 |
|
br i1 %cmp55, label %while.body.56, label %cleanup.cont.83.loopexit166 |
|
|
|
while.body.56: ; preds = %_ZNK6String11lastIndexOfERKS_j.exit |
|
%add.ptr58 = getelementptr inbounds i8, i8* %20, i16 %retval.0.i.141 |
|
%add.ptr60 = getelementptr inbounds i8, i8* %add.ptr58, i16 %18 |
|
%add.ptr61 = getelementptr inbounds i8, i8* %add.ptr60, i16 %sub |
|
%sub.ptr.lhs.cast64 = ptrtoint i8* %add.ptr60 to i16 |
|
%sub.ptr.sub66136 = add i16 %19, %sub.ptr.rhs.cast.i |
|
%sub67 = sub i16 %sub.ptr.sub66136, %sub.ptr.lhs.cast64 |
|
tail call void @llvm.memmove.p0i8.p0i8.i16(i8* %add.ptr61, i8* %add.ptr60, i16 %sub67, i32 1, i1 false) |
|
%22 = load i16, i16* %len, align 2, !tbaa !8 |
|
%add69 = add i16 %22, %sub |
|
store i16 %add69, i16* %len, align 2, !tbaa !8 |
|
%23 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%arrayidx = getelementptr inbounds i8, i8* %23, i16 %add69 |
|
store i8 0, i8* %arrayidx, align 1, !tbaa !9 |
|
%24 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%add.ptr73 = getelementptr inbounds i8, i8* %24, i16 %retval.0.i.141 |
|
%25 = load i8*, i8** %buffer74, align 2, !tbaa !1 |
|
%26 = load i16, i16* %len4, align 2, !tbaa !8 |
|
tail call void @llvm.memcpy.p0i8.p0i8.i16(i8* %add.ptr73, i8* %25, i16 %26, i32 1, i1 false) |
|
%index.0 = add i16 %retval.0.i.141, -1 |
|
%cmp53 = icmp sgt i16 %index.0, -1 |
|
br i1 %cmp53, label %land.rhs, label %cleanup.cont.83.loopexit166 |
|
|
|
cleanup.cont.83.loopexit: ; preds = %while.body |
|
br label %cleanup.cont.83 |
|
|
|
cleanup.cont.83.loopexit166: ; preds = %if.end.i, %land.rhs, %lor.lhs.false.i, %while.body.56, %_ZNK6String11lastIndexOfERKS_j.exit |
|
br label %cleanup.cont.83 |
|
|
|
cleanup.cont.83: ; preds = %cleanup.cont.83.loopexit166, %cleanup.cont.83.loopexit, %while.cond.33.preheader, %if.end.49, %while.cond.preheader, %land.lhs.true, %while.end.29, %while.end.41, %entry, %lor.lhs.false |
|
ret void |
|
} |
|
|
|
; Function Attrs: nounwind |
|
declare void @llvm.memcpy.p0i8.p0i8.i16(i8* nocapture, i8* nocapture readonly, i16, i32, i1) #3 |
|
|
|
; Function Attrs: nounwind |
|
declare void @llvm.memmove.p0i8.p0i8.i16(i8* nocapture, i8* nocapture readonly, i16, i32, i1) #3 |
|
|
|
; Function Attrs: nounwind |
|
define void @_ZN6String6removeEj(%class.String* nocapture %this, i16 %index) #0 align 2 { |
|
entry: |
|
%len.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%cmp.i = icmp ugt i16 %0, %index |
|
br i1 %cmp.i, label %if.end.4.i, label %_ZN6String6removeEjj.exit |
|
|
|
if.end.4.i: ; preds = %entry |
|
%sub.i = sub i16 %0, %index |
|
%buffer.i = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%1 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%add.ptr.i = getelementptr inbounds i8, i8* %1, i16 %index |
|
store i16 %index, i16* %len.i, align 2, !tbaa !8 |
|
%add.ptr16.i = getelementptr inbounds i8, i8* %add.ptr.i, i16 %sub.i |
|
%call.i = tail call i8* @strncpy(i8* %add.ptr.i, i8* %add.ptr16.i, i16 0) #3 |
|
%2 = load i16, i16* %len.i, align 2, !tbaa !8 |
|
%3 = load i8*, i8** %buffer.i, align 2, !tbaa !1 |
|
%arrayidx.i = getelementptr inbounds i8, i8* %3, i16 %2 |
|
store i8 0, i8* %arrayidx.i, align 1, !tbaa !9 |
|
br label %_ZN6String6removeEjj.exit |
|
|
|
_ZN6String6removeEjj.exit: ; preds = %entry, %if.end.4.i |
|
ret void |
|
} |
|
|
|
; Function Attrs: nounwind |
|
define void @_ZN6String6removeEjj(%class.String* nocapture %this, i16 %index, i16 %count) #0 align 2 { |
|
entry: |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%0 = load i16, i16* %len, align 2, !tbaa !8 |
|
%cmp = icmp ule i16 %0, %index |
|
%cmp2 = icmp eq i16 %count, 0 |
|
%or.cond = or i1 %cmp2, %cmp |
|
br i1 %or.cond, label %return, label %if.end.4 |
|
|
|
if.end.4: ; preds = %entry |
|
%sub = sub i16 %0, %index |
|
%cmp6 = icmp ult i16 %sub, %count |
|
%sub.count = select i1 %cmp6, i16 %sub, i16 %count |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%1 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%add.ptr = getelementptr inbounds i8, i8* %1, i16 %index |
|
%sub12 = sub i16 %0, %sub.count |
|
store i16 %sub12, i16* %len, align 2, !tbaa !8 |
|
%add.ptr16 = getelementptr inbounds i8, i8* %add.ptr, i16 %sub.count |
|
%sub18 = sub i16 %sub12, %index |
|
%call = tail call i8* @strncpy(i8* %add.ptr, i8* %add.ptr16, i16 %sub18) |
|
%2 = load i16, i16* %len, align 2, !tbaa !8 |
|
%3 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%arrayidx = getelementptr inbounds i8, i8* %3, i16 %2 |
|
store i8 0, i8* %arrayidx, align 1, !tbaa !9 |
|
br label %return |
|
|
|
return: ; preds = %entry, %if.end.4 |
|
ret void |
|
} |
|
|
|
; Function Attrs: nounwind |
|
define void @_ZN6String11toLowerCaseEv(%class.String* nocapture readonly %this) #0 align 2 { |
|
entry: |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%0 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%tobool = icmp eq i8* %0, null |
|
br i1 %tobool, label %for.end, label %for.cond.preheader |
|
|
|
for.cond.preheader: ; preds = %entry |
|
%1 = load i8, i8* %0, align 1, !tbaa !9 |
|
%tobool3.9 = icmp eq i8 %1, 0 |
|
br i1 %tobool3.9, label %for.end, label %for.body.preheader |
|
|
|
for.body.preheader: ; preds = %for.cond.preheader |
|
br label %for.body |
|
|
|
for.body: ; preds = %for.body.preheader, %for.body |
|
%2 = phi i8 [ %3, %for.body ], [ %1, %for.body.preheader ] |
|
%p.010 = phi i8* [ %incdec.ptr, %for.body ], [ %0, %for.body.preheader ] |
|
%conv = sext i8 %2 to i16 |
|
%call = tail call i16 @tolower(i16 %conv) #6 |
|
%conv4 = trunc i16 %call to i8 |
|
store i8 %conv4, i8* %p.010, align 1, !tbaa !9 |
|
%incdec.ptr = getelementptr inbounds i8, i8* %p.010, i16 1 |
|
%3 = load i8, i8* %incdec.ptr, align 1, !tbaa !9 |
|
%tobool3 = icmp eq i8 %3, 0 |
|
br i1 %tobool3, label %for.end.loopexit, label %for.body |
|
|
|
for.end.loopexit: ; preds = %for.body |
|
br label %for.end |
|
|
|
for.end: ; preds = %for.end.loopexit, %for.cond.preheader, %entry |
|
ret void |
|
} |
|
|
|
; Function Attrs: nounwind |
|
define void @_ZN6String11toUpperCaseEv(%class.String* nocapture readonly %this) #0 align 2 { |
|
entry: |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%0 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%tobool = icmp eq i8* %0, null |
|
br i1 %tobool, label %for.end, label %for.cond.preheader |
|
|
|
for.cond.preheader: ; preds = %entry |
|
%1 = load i8, i8* %0, align 1, !tbaa !9 |
|
%tobool3.9 = icmp eq i8 %1, 0 |
|
br i1 %tobool3.9, label %for.end, label %for.body.preheader |
|
|
|
for.body.preheader: ; preds = %for.cond.preheader |
|
br label %for.body |
|
|
|
for.body: ; preds = %for.body.preheader, %for.body |
|
%2 = phi i8 [ %3, %for.body ], [ %1, %for.body.preheader ] |
|
%p.010 = phi i8* [ %incdec.ptr, %for.body ], [ %0, %for.body.preheader ] |
|
%conv = sext i8 %2 to i16 |
|
%call = tail call i16 @toupper(i16 %conv) #6 |
|
%conv4 = trunc i16 %call to i8 |
|
store i8 %conv4, i8* %p.010, align 1, !tbaa !9 |
|
%incdec.ptr = getelementptr inbounds i8, i8* %p.010, i16 1 |
|
%3 = load i8, i8* %incdec.ptr, align 1, !tbaa !9 |
|
%tobool3 = icmp eq i8 %3, 0 |
|
br i1 %tobool3, label %for.end.loopexit, label %for.body |
|
|
|
for.end.loopexit: ; preds = %for.body |
|
br label %for.end |
|
|
|
for.end: ; preds = %for.end.loopexit, %for.cond.preheader, %entry |
|
ret void |
|
} |
|
|
|
; Function Attrs: nounwind readnone |
|
declare i16 @toupper(i16) #4 |
|
|
|
; Function Attrs: nounwind |
|
define void @_ZN6String4trimEv(%class.String* nocapture %this) #0 align 2 { |
|
entry: |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%0 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%tobool = icmp eq i8* %0, null |
|
br i1 %tobool, label %return, label %lor.lhs.false |
|
|
|
lor.lhs.false: ; preds = %entry |
|
%len = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 2 |
|
%1 = load i16, i16* %len, align 2, !tbaa !8 |
|
%cmp = icmp eq i16 %1, 0 |
|
br i1 %cmp, label %return, label %while.cond.preheader |
|
|
|
while.cond.preheader: ; preds = %lor.lhs.false |
|
br label %while.cond |
|
|
|
while.cond: ; preds = %while.cond.preheader, %while.cond |
|
%begin.0 = phi i8* [ %incdec.ptr, %while.cond ], [ %0, %while.cond.preheader ] |
|
%2 = load i8, i8* %begin.0, align 1, !tbaa !9 |
|
%conv = sext i8 %2 to i16 |
|
%call = tail call i16 @isspace(i16 %conv) #6 |
|
%tobool3 = icmp eq i16 %call, 0 |
|
%incdec.ptr = getelementptr inbounds i8, i8* %begin.0, i16 1 |
|
br i1 %tobool3, label %while.end, label %while.cond |
|
|
|
while.end: ; preds = %while.cond |
|
%begin.0.lcssa = phi i8* [ %begin.0, %while.cond ] |
|
%add.ptr = getelementptr inbounds i8, i8* %0, i16 %1 |
|
br label %while.cond.7 |
|
|
|
while.cond.7: ; preds = %while.cond.7, %while.end |
|
%add.ptr.pn = phi i8* [ %add.ptr, %while.end ], [ %end.0, %while.cond.7 ] |
|
%end.0 = getelementptr inbounds i8, i8* %add.ptr.pn, i16 -1 |
|
%3 = load i8, i8* %end.0, align 1, !tbaa !9 |
|
%conv8 = sext i8 %3 to i16 |
|
%call9 = tail call i16 @isspace(i16 %conv8) #6 |
|
%cmp11 = icmp uge i8* %end.0, %begin.0.lcssa |
|
%not.tobool10 = icmp ne i16 %call9, 0 |
|
%.cmp11 = and i1 %cmp11, %not.tobool10 |
|
br i1 %.cmp11, label %while.cond.7, label %while.end.14 |
|
|
|
while.end.14: ; preds = %while.cond.7 |
|
%add.ptr.pn.lcssa = phi i8* [ %add.ptr.pn, %while.cond.7 ] |
|
%sub.ptr.lhs.cast = ptrtoint i8* %add.ptr.pn.lcssa to i16 |
|
%sub.ptr.rhs.cast = ptrtoint i8* %begin.0.lcssa to i16 |
|
%sub.ptr.sub = sub i16 %sub.ptr.lhs.cast, %sub.ptr.rhs.cast |
|
store i16 %sub.ptr.sub, i16* %len, align 2, !tbaa !8 |
|
%cmp18 = icmp ugt i8* %begin.0.lcssa, %0 |
|
br i1 %cmp18, label %if.then.19, label %if.end.22 |
|
|
|
if.then.19: ; preds = %while.end.14 |
|
tail call void @llvm.memcpy.p0i8.p0i8.i16(i8* %0, i8* %begin.0.lcssa, i16 %sub.ptr.sub, i32 1, i1 false) |
|
%.pre = load i16, i16* %len, align 2, !tbaa !8 |
|
%.pre34 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
br label %if.end.22 |
|
|
|
if.end.22: ; preds = %if.then.19, %while.end.14 |
|
%4 = phi i8* [ %.pre34, %if.then.19 ], [ %0, %while.end.14 ] |
|
%5 = phi i16 [ %.pre, %if.then.19 ], [ %sub.ptr.sub, %while.end.14 ] |
|
%arrayidx = getelementptr inbounds i8, i8* %4, i16 %5 |
|
store i8 0, i8* %arrayidx, align 1, !tbaa !9 |
|
br label %return |
|
|
|
return: ; preds = %entry, %lor.lhs.false, %if.end.22 |
|
ret void |
|
} |
|
|
|
; Function Attrs: nounwind readnone |
|
declare i16 @isspace(i16) #4 |
|
|
|
; Function Attrs: nounwind readonly |
|
define i32 @_ZNK6String5toIntEv(%class.String* nocapture readonly %this) #1 align 2 { |
|
entry: |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%0 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%tobool = icmp eq i8* %0, null |
|
br i1 %tobool, label %return, label %if.then |
|
|
|
if.then: ; preds = %entry |
|
%call = tail call i32 @atol(i8* %0) #5 |
|
br label %return |
|
|
|
return: ; preds = %entry, %if.then |
|
%retval.0 = phi i32 [ %call, %if.then ], [ 0, %entry ] |
|
ret i32 %retval.0 |
|
} |
|
|
|
; Function Attrs: nounwind readonly |
|
declare i32 @atol(i8* nocapture) #1 |
|
|
|
; Function Attrs: nounwind readonly |
|
define float @_ZNK6String7toFloatEv(%class.String* nocapture readonly %this) #1 align 2 { |
|
entry: |
|
%buffer = getelementptr inbounds %class.String, %class.String* %this, i16 0, i32 0 |
|
%0 = load i8*, i8** %buffer, align 2, !tbaa !1 |
|
%tobool = icmp eq i8* %0, null |
|
br i1 %tobool, label %return, label %if.then |
|
|
|
if.then: ; preds = %entry |
|
%call = tail call double @atof(i8* %0) |
|
%conv = fptrunc double %call to float |
|
br label %return |
|
|
|
return: ; preds = %entry, %if.then |
|
%retval.0 = phi float [ %conv, %if.then ], [ 0.000000e+00, %entry ] |
|
ret float %retval.0 |
|
} |
|
|
|
; Function Attrs: nounwind readonly |
|
declare double @atof(i8* nocapture) #1 |
|
|
|
declare i8* @__utoa(i16, i8*, i16) #2 |
|
|
|
declare i8* @__itoa(i16, i8*, i16) #2 |
|
|
|
declare i8* @__ltoa(i32, i8*, i16) #2 |
|
|
|
declare i8* @__ultoa(i32, i8*, i16) #2 |
|
|
|
; Function Attrs: nounwind readnone |
|
declare i16 @__strlen_P(i8*) #4 |
|
|
|
attributes #0 = { nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="atmega328p" "unsafe-fp-math"="false" "use-soft-float"="false" } |
|
attributes #1 = { nounwind readonly "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="atmega328p" "unsafe-fp-math"="false" "use-soft-float"="false" } |
|
attributes #2 = { "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="atmega328p" "unsafe-fp-math"="false" "use-soft-float"="false" } |
|
attributes #3 = { nounwind } |
|
attributes #4 = { nounwind readnone "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="atmega328p" "unsafe-fp-math"="false" "use-soft-float"="false" } |
|
attributes #5 = { nounwind readonly } |
|
attributes #6 = { nounwind readnone } |
|
|
|
!llvm.ident = !{!0} |
|
|
|
!0 = !{!"clang version 3.7.0 (https://github.com/llvm-mirror/clang.git 287e62c84a1ccd74fbca46bfc13e364e314d4b41) (https://github.com/llvm-mirror/llvm.git aaab572fc38b4438e769e2fd6b91963be11db7b2)"} |
|
!1 = !{!2, !3, i64 0} |
|
!2 = !{!"_ZTS6String", !3, i64 0, !6, i64 2, !6, i64 4} |
|
!3 = !{!"any pointer", !4, i64 0} |
|
!4 = !{!"omnipotent char", !5, i64 0} |
|
!5 = !{!"Simple C/C++ TBAA"} |
|
!6 = !{!"int", !4, i64 0} |
|
!7 = !{!2, !6, i64 2} |
|
!8 = !{!2, !6, i64 4} |
|
!9 = !{!4, !4, i64 0} |