Skip to content

Instantly share code, notes, and snippets.

@Chris--B
Last active December 18, 2015 20:49
Show Gist options
  • Save Chris--B/5842750 to your computer and use it in GitHub Desktop.
Save Chris--B/5842750 to your computer and use it in GitHub Desktop.
;clang version 3.2 (tags/RELEASE_32/final)
;Target: x86_64-unknown-linux-gnu
;Thread model: posix
; ModuleID = 'degrad.cpp'
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%class.Radians = type { float }
define i32 @_Z17something_byvalue7Radians(float %r.coerce) uwtable {
%1 = fcmp olt float %r.coerce, 0.000000e+00
br i1 %1, label %._crit_edge, label %.lr.ph..lr.ph.split_crit_edge
.lr.ph..lr.ph.split_crit_edge: ; preds = %0, %.lr.ph..lr.ph.split_crit_edge
%i.03 = phi i32 [ %3, %.lr.ph..lr.ph.split_crit_edge ], [ 0, %0 ]
%2 = tail call i32 @_Z3barv()
%3 = add nsw i32 %i.03, 1
%exitcond = icmp eq i32 %3, 1024
br i1 %exitcond, label %._crit_edge, label %.lr.ph..lr.ph.split_crit_edge
._crit_edge: ; preds = %.lr.ph..lr.ph.split_crit_edge, %0
%i.0.lcssa = phi i32 [ 0, %0 ], [ 1024, %.lr.ph..lr.ph.split_crit_edge ]
ret i32 %i.0.lcssa
}
declare i32 @_Z3barv()
define i32 @_Z15something_byrefRK7Radians(%class.Radians* nocapture %r) uwtable {
%1 = getelementptr inbounds %class.Radians* %r, i64 0, i32 0
br label %2
; <label>:2 ; preds = %0, %5
%i.03 = phi i32 [ 0, %0 ], [ %7, %5 ]
%3 = load float* %1, align 4, !tbaa !0
%4 = fcmp olt float %3, 0.000000e+00
br i1 %4, label %9, label %5
; <label>:5 ; preds = %2
%6 = tail call i32 @_Z3barv()
%7 = add nsw i32 %i.03, 1
%8 = icmp slt i32 %7, 1024
br i1 %8, label %2, label %9
; <label>:9 ; preds = %2, %5
%i.0.lcssa = phi i32 [ %i.03, %2 ], [ %7, %5 ]
ret i32 %i.0.lcssa
}
!0 = metadata !{metadata !"float", metadata !1}
!1 = metadata !{metadata !"omnipotent char", metadata !2}
!2 = metadata !{metadata !"Simple C/C++ TBAA"}
#include "degrad.h"
extern int bar();
int something_byvalue(Radians r) {
int i;
for (i=0; i < 1024; i++) {
if (r.getValue() < 0) break;
bar();
}
return i;
}
int something_byref(const Radians& r) {
int i;
for (i=0; i < 1024; i++) {
if (r.getValue() < 0) break;
bar();
}
return i;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment