--- /dev/null
+
+implementation ; Functions:
+
+declare void %__main()
+
+int %foo(int %X, int %Y, double %A) {
+bb0: ; No predecessors!
+ %cond212 = setne double %A, 1.000000e+00 ; <bool> [#uses=1]
+ %cast110 = cast bool %cond212 to int ; <int> [#uses=1]
+ ret int %cast110
+}
+
+int %main() {
+bb0: ; No predecessors!
+ call void %__main( )
+ %reg212 = call int %foo( int 0, int 1, double 1.000000e+00 ) ; <int> [#uses=1]
+ ret int %reg212
+}
--- /dev/null
+implementation
+
+int %main() {
+ call int %mylog(int 4)
+ ret int 0
+}
+
+internal int %mylog(int %num) {
+bb0: ; No predecessors!
+ br label %bb2
+
+bb2:
+ %reg112 = phi int [ 10, %bb2 ], [ 1, %bb0 ]
+ %cann-indvar = phi int [ %cann-indvar, %bb2 ], [0, %bb0]
+ %reg114 = add int %reg112, 1
+ %cond222 = setlt int %reg114, %num
+ br bool %cond222, label %bb2, label %bb3
+
+bb3: ; preds = %bb2, %bb0
+ ret int %reg114
+}
+
--- /dev/null
+; We were accidentally inverting the signedness of right shifts. Whoops.
+
+int %main() {
+ %X = shr int -1, ubyte 16
+ %Y = shr int %X, ubyte 16
+ %Z = add int %Y, 1
+ ret int %Z
+}
--- /dev/null
+
+int %main() {
+ %X = add double 0.0, 1.0
+ %Y = sub double 0.0, 1.0
+ %Z = seteq double %X, %Y
+ add double %Y, 0.0
+ ret int 0
+}
--- /dev/null
+
+int %main() {
+ %X = malloc int ; constant size
+ %Y = malloc int, uint 100 ; constant size
+ %u = add uint 1, 2
+ %Z = malloc int, uint %u ; variable size
+ free int* %X
+ free int* %Y
+ free int* %Z
+ ret int 0
+}