; ModuleID = './IPAddress.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.IPAddress = type { %class.Printable, %union.anon } %class.Printable = type { i32 (...)** } %union.anon = type { [4 x i8] } %class.Print = type { i32 (...)**, i16 } $_ZTS9Printable = comdat any $_ZTI9Printable = comdat any @_ZTV9IPAddress = unnamed_addr constant [3 x i8*] [i8* null, i8* bitcast ({ i8*, i8*, i8* }* @_ZTI9IPAddress to i8*), i8* bitcast (i16 (%class.IPAddress*, %class.Print*)* @_ZNK9IPAddress7printToER5Print to i8*)], align 2 @_ZTVN10__cxxabiv120__si_class_type_infoE = external global i8* @_ZTS9IPAddress = constant [11 x i8] c"9IPAddress\00" @_ZTVN10__cxxabiv117__class_type_infoE = external global i8* @_ZTS9Printable = linkonce_odr constant [11 x i8] c"9Printable\00", comdat @_ZTI9Printable = linkonce_odr constant { i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv117__class_type_infoE, i16 2) to i8*), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @_ZTS9Printable, i32 0, i32 0) }, comdat @_ZTI9IPAddress = constant { i8*, i8*, i8* } { i8* bitcast (i8** getelementptr inbounds (i8*, i8** @_ZTVN10__cxxabiv120__si_class_type_infoE, i16 2) to i8*), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @_ZTS9IPAddress, i32 0, i32 0), i8* bitcast ({ i8*, i8* }* @_ZTI9Printable to i8*) } @llvm.global_ctors = appending global [0 x { i32, void ()*, i8* }] zeroinitializer @_ZN9IPAddressC1Ev = alias void (%class.IPAddress*)* @_ZN9IPAddressC2Ev @_ZN9IPAddressC1Ehhhh = alias void (%class.IPAddress*, i8, i8, i8, i8)* @_ZN9IPAddressC2Ehhhh @_ZN9IPAddressC1Em = alias void (%class.IPAddress*, i32)* @_ZN9IPAddressC2Em @_ZN9IPAddressC1EPKh = alias void (%class.IPAddress*, i8*)* @_ZN9IPAddressC2EPKh ; Function Attrs: nounwind define void @_ZN9IPAddressC2Ev(%class.IPAddress* nocapture %this) unnamed_addr #0 align 2 { entry: %0 = getelementptr inbounds %class.IPAddress, %class.IPAddress* %this, i16 0, i32 0, i32 0 store i32 (...)** bitcast (i8** getelementptr inbounds ([3 x i8*], [3 x i8*]* @_ZTV9IPAddress, i16 0, i16 2) to i32 (...)**), i32 (...)*** %0, align 1, !tbaa !1 %_address2 = getelementptr inbounds %class.IPAddress, %class.IPAddress* %this, i16 0, i32 1 %dword = bitcast %union.anon* %_address2 to i32* store i32 0, i32* %dword, align 2, !tbaa !4 ret void } ; Function Attrs: nounwind define void @_ZN9IPAddressC2Ehhhh(%class.IPAddress* nocapture %this, i8 zeroext %first_octet, i8 zeroext %second_octet, i8 zeroext %third_octet, i8 zeroext %fourth_octet) unnamed_addr #0 align 2 { entry: %0 = getelementptr inbounds %class.IPAddress, %class.IPAddress* %this, i16 0, i32 0, i32 0 store i32 (...)** bitcast (i8** getelementptr inbounds ([3 x i8*], [3 x i8*]* @_ZTV9IPAddress, i16 0, i16 2) to i32 (...)**), i32 (...)*** %0, align 1, !tbaa !1 %arrayidx = getelementptr inbounds %class.IPAddress, %class.IPAddress* %this, i16 0, i32 1, i32 0, i16 0 store i8 %first_octet, i8* %arrayidx, align 1, !tbaa !7 %arrayidx5 = getelementptr inbounds %class.IPAddress, %class.IPAddress* %this, i16 0, i32 1, i32 0, i16 1 store i8 %second_octet, i8* %arrayidx5, align 1, !tbaa !7 %arrayidx8 = getelementptr inbounds %class.IPAddress, %class.IPAddress* %this, i16 0, i32 1, i32 0, i16 2 store i8 %third_octet, i8* %arrayidx8, align 1, !tbaa !7 %arrayidx11 = getelementptr inbounds %class.IPAddress, %class.IPAddress* %this, i16 0, i32 1, i32 0, i16 3 store i8 %fourth_octet, i8* %arrayidx11, align 1, !tbaa !7 ret void } ; Function Attrs: nounwind define void @_ZN9IPAddressC2Em(%class.IPAddress* nocapture %this, i32 %address) unnamed_addr #0 align 2 { entry: %0 = getelementptr inbounds %class.IPAddress, %class.IPAddress* %this, i16 0, i32 0, i32 0 store i32 (...)** bitcast (i8** getelementptr inbounds ([3 x i8*], [3 x i8*]* @_ZTV9IPAddress, i16 0, i16 2) to i32 (...)**), i32 (...)*** %0, align 1, !tbaa !1 %_address2 = getelementptr inbounds %class.IPAddress, %class.IPAddress* %this, i16 0, i32 1 %dword = bitcast %union.anon* %_address2 to i32* store i32 %address, i32* %dword, align 2, !tbaa !4 ret void } ; Function Attrs: nounwind define void @_ZN9IPAddressC2EPKh(%class.IPAddress* nocapture %this, i8* nocapture readonly %address) unnamed_addr #0 align 2 { entry: %0 = getelementptr inbounds %class.IPAddress, %class.IPAddress* %this, i16 0, i32 0, i32 0 store i32 (...)** bitcast (i8** getelementptr inbounds ([3 x i8*], [3 x i8*]* @_ZTV9IPAddress, i16 0, i16 2) to i32 (...)**), i32 (...)*** %0, align 1, !tbaa !1 %1 = getelementptr inbounds %class.IPAddress, %class.IPAddress* %this, i16 0, i32 1, i32 0, i16 0 %2 = bitcast i8* %address to i32* %3 = bitcast i8* %1 to i32* %4 = load i32, i32* %2, align 1 store i32 %4, i32* %3, align 1 ret void } ; Function Attrs: nounwind define dereferenceable(6) %class.IPAddress* @_ZN9IPAddressaSEPKh(%class.IPAddress* %this, i8* nocapture readonly %address) #0 align 2 { entry: %0 = getelementptr inbounds %class.IPAddress, %class.IPAddress* %this, i16 0, i32 1, i32 0, i16 0 %1 = bitcast i8* %address to i32* %2 = bitcast i8* %0 to i32* %3 = load i32, i32* %1, align 1 store i32 %3, i32* %2, align 1 ret %class.IPAddress* %this } ; Function Attrs: nounwind define dereferenceable(6) %class.IPAddress* @_ZN9IPAddressaSEm(%class.IPAddress* %this, i32 %address) #0 align 2 { entry: %_address = getelementptr inbounds %class.IPAddress, %class.IPAddress* %this, i16 0, i32 1 %dword = bitcast %union.anon* %_address to i32* store i32 %address, i32* %dword, align 2, !tbaa !4 ret %class.IPAddress* %this } ; Function Attrs: nounwind readonly define zeroext i1 @_ZNK9IPAddresseqEPKh(%class.IPAddress* nocapture readonly %this, i8* nocapture readonly %addr) #1 align 2 { entry: %arraydecay = getelementptr inbounds %class.IPAddress, %class.IPAddress* %this, i16 0, i32 1, i32 0, i16 0 %call = tail call i16 @memcmp(i8* %addr, i8* %arraydecay, i16 4) #3 %cmp = icmp eq i16 %call, 0 ret i1 %cmp } ; Function Attrs: nounwind readonly declare i16 @memcmp(i8* nocapture, i8* nocapture, i16) #1 define i16 @_ZNK9IPAddress7printToER5Print(%class.IPAddress* nocapture readonly %this, %class.Print* dereferenceable(4) %p) unnamed_addr #2 align 2 { entry: %arrayidx = getelementptr inbounds %class.IPAddress, %class.IPAddress* %this, i16 0, i32 1, i32 0, i16 0 %0 = load i8, i8* %arrayidx, align 1, !tbaa !7 %call = tail call i16 @_ZN5Print5printEhi(%class.Print* nonnull %p, i8 zeroext %0, i16 10) %call2 = tail call i16 @_ZN5Print5printEc(%class.Print* nonnull %p, i8 signext 46) %add3 = add i16 %call, %call2 %arrayidx.1 = getelementptr inbounds %class.IPAddress, %class.IPAddress* %this, i16 0, i32 1, i32 0, i16 1 %1 = load i8, i8* %arrayidx.1, align 1, !tbaa !7 %call.1 = tail call i16 @_ZN5Print5printEhi(%class.Print* nonnull %p, i8 zeroext %1, i16 10) %add.1 = add i16 %call.1, %add3 %call2.1 = tail call i16 @_ZN5Print5printEc(%class.Print* nonnull %p, i8 signext 46) %add3.1 = add i16 %add.1, %call2.1 %arrayidx.2 = getelementptr inbounds %class.IPAddress, %class.IPAddress* %this, i16 0, i32 1, i32 0, i16 2 %2 = load i8, i8* %arrayidx.2, align 1, !tbaa !7 %call.2 = tail call i16 @_ZN5Print5printEhi(%class.Print* nonnull %p, i8 zeroext %2, i16 10) %add.2 = add i16 %call.2, %add3.1 %call2.2 = tail call i16 @_ZN5Print5printEc(%class.Print* nonnull %p, i8 signext 46) %add3.2 = add i16 %add.2, %call2.2 %arrayidx6 = getelementptr inbounds %class.IPAddress, %class.IPAddress* %this, i16 0, i32 1, i32 0, i16 3 %3 = load i8, i8* %arrayidx6, align 1, !tbaa !7 %call7 = tail call i16 @_ZN5Print5printEhi(%class.Print* nonnull %p, i8 zeroext %3, i16 10) %add8 = add i16 %call7, %add3.2 ret i16 %add8 } declare i16 @_ZN5Print5printEhi(%class.Print*, i8 zeroext, i16) #2 declare i16 @_ZN5Print5printEc(%class.Print*, i8 signext) #2 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 readonly } !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, !2, i64 0} !2 = !{!"vtable pointer", !3, i64 0} !3 = !{!"Simple C/C++ TBAA"} !4 = !{!5, !5, i64 0} !5 = !{!"long", !6, i64 0} !6 = !{!"omnipotent char", !3, i64 0} !7 = !{!6, !6, i64 0}