llvm.org GIT mirror llvm / 32b845d
[opaque pointer type] Add textual IR support for explicit type parameter to the call instruction See r230786 and r230794 for similar changes to gep and load respectively. Call is a bit different because it often doesn't have a single explicit type - usually the type is deduced from the arguments, and just the return type is explicit. In those cases there's no need to change the IR. When that's not the case, the IR usually contains the pointer type of the first operand - but since typed pointers are going away, that representation is insufficient so I'm just stripping the "pointerness" of the explicit type away. This does make the IR a bit weird - it /sort of/ reads like the type of the first operand: "call void () %x(" but %x is actually of type "void ()*" and will eventually be just of type "ptr". But this seems not too bad and I don't think it would benefit from repeating the type ("void (), void () * %x(" and then eventually "void (), ptr %x(") as has been done with gep and load. This also has a side benefit: since the explicit type is no longer a pointer, there's no ambiguity between an explicit type and a function that returns a function pointer. Previously this case needed an explicit type (eg: a function returning a void() function was written as "call void () () * @x(" rather than "call void () * @x(" because of the ambiguity between a function returning a pointer to a void() function and a function returning void). No ambiguity means even function pointer return types can just be written alone, without writing the whole function's type. This leaves /only/ the varargs case where the explicit type is required. Given the special type syntax in call instructions, the regex-fu used for migration was a bit more involved in its own unique way (as every one of these is) so here it is. Use it in conjunction with the apply.sh script and associated find/xargs commands I've provided in rr230786 to migrate your out of tree tests. Do let me know if any of this doesn't cover your cases & we can iterate on a more general script/regexes to help others with out of tree tests. About 9 test cases couldn't be automatically migrated - half of those were functions returning function pointers, where I just had to manually delete the function argument types now that we didn't need an explicit function type there. The other half were typedefs of function types used in calls - just had to manually drop the * from those. import fileinput import sys import re pat = re.compile(r'((?:=|:|^|\s)call\s(?:[^@]*?))(\s*$|\s*(?:(?:\[\[[a-zA-Z0-9_]+\]\]|[@%](?:(")?[\\\?@a-zA-Z0-9_.]*?(?(3)"|)|{{.*}}))(?:\(|$)|undef|inttoptr|bitcast|null|asm).*$)') addrspace_end = re.compile(r"addrspace\(\d+\)\s*\*$") func_end = re.compile("(?:void.*|\)\s*)\*$") def conv(match, line): if not match or re.search(addrspace_end, match.group(1)) or not re.search(func_end, match.group(1)): return line return line[:match.start()] + match.group(1)[:match.group(1).rfind('*')].rstrip() + match.group(2) + line[match.end():] for line in sys.stdin: sys.stdout.write(conv(re.search(pat, line), line)) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235145 91177308-0d34-0410-b5e6-96231b3b80d8 David Blaikie 4 years ago
560 changed file(s) with 1503 addition(s) and 1508 deletion(s). Raw diff Collapse all Expand all
13351335 static Instruction* CreateFree(Value* Source, BasicBlock *InsertAtEnd);
13361336
13371337 ~CallInst() override;
1338
1339 Type *getFunctionType() const {
1340 return cast(getCalledValue()->getType())->getElementType();
1341 }
13381342
13391343 // Note that 'musttail' implies 'tail'.
13401344 enum TailCallKind { TCK_None = 0, TCK_Tail = 1, TCK_MustTail = 2 };
51595159 // If RetType is a non-function pointer type, then this is the short syntax
51605160 // for the call, which means that RetType is just the return type. Infer the
51615161 // rest of the function argument types from the arguments that are present.
5162 PointerType *PFTy = nullptr;
5163 FunctionType *Ty = nullptr;
5164 if (!(PFTy = dyn_cast(RetType)) ||
5165 !(Ty = dyn_cast(PFTy->getElementType()))) {
5162 FunctionType *Ty = dyn_cast(RetType);
5163 if (!Ty) {
51665164 // Pull out the types of all of the arguments...
51675165 std::vector ParamTypes;
51685166 for (unsigned i = 0, e = ArgList.size(); i != e; ++i)
51725170 return Error(RetTypeLoc, "Invalid result type for LLVM function");
51735171
51745172 Ty = FunctionType::get(RetType, ParamTypes, false);
5175 PFTy = PointerType::getUnqual(Ty);
51765173 }
51775174
51785175 // Look up the callee.
51795176 Value *Callee;
5180 if (ConvertValIDToValue(PFTy, CalleeID, Callee, &PFS)) return true;
5177 if (ConvertValIDToValue(PointerType::getUnqual(Ty), CalleeID, Callee, &PFS))
5178 return true;
51815179
51825180 // Set up the Attribute for the function.
51835181 SmallVector Attrs;
27802780 }
27812781
27822782 Operand = CI->getCalledValue();
2783 PointerType *PTy = cast(Operand->getType());
2784 FunctionType *FTy = cast(PTy->getElementType());
2783 FunctionType *FTy = cast(CI->getFunctionType());
27852784 Type *RetTy = FTy->getReturnType();
27862785 const AttributeSet &PAL = CI->getAttributes();
27872786
27932792 // and if the return type is not a pointer to a function.
27942793 //
27952794 Out << ' ';
2796 if (!FTy->isVarArg() &&
2797 (!RetTy->isPointerTy() ||
2798 !cast(RetTy)->getElementType()->isFunctionTy())) {
2799 TypePrinter.print(RetTy, Out);
2800 Out << ' ';
2801 writeOperand(Operand, false);
2802 } else {
2803 writeOperand(Operand, true);
2804 }
2795 TypePrinter.print(FTy->isVarArg() ? FTy : RetTy, Out);
2796 Out << ' ';
2797 writeOperand(Operand, false);
28052798 Out << '(';
28062799 for (unsigned op = 0, Eop = CI->getNumArgOperands(); op < Eop; ++op) {
28072800 if (op > 0)
2525 loopexit: ; preds = %no_exit, %entry
2626 %Y.0.1 = phi i32 [ 0, %entry ], [ %tmp.13, %no_exit ] ; [#uses=1]
2727 %tmp.4 = getelementptr [3 x [3 x i32]], [3 x [3 x i32]]* %X, i32 0, i32 0 ; <[3 x i32]*> [#uses=1]
28 %tmp.15 = call i32 (...)* @foo( [3 x i32]* %tmp.4, i32 %Y.0.1 ) ; [#uses=0]
28 %tmp.15 = call i32 (...) @foo( [3 x i32]* %tmp.4, i32 %Y.0.1 ) ; [#uses=0]
2929 ret void
3030 }
3131
99 %tmp = getelementptr %struct.x, %struct.x* %X, i32 0, i32 0 ; <[4 x i32]*> [#uses=1]
1010 %tmp1 = getelementptr [4 x i32], [4 x i32]* %tmp, i32 0, i32 3 ; [#uses=1]
1111 store i32 2, i32* %tmp1, align 4
12 %tmp2 = call i32 (...)* @bar( %struct.x* byval align 4 %X ) nounwind ; [#uses=0]
12 %tmp2 = call i32 (...) @bar( %struct.x* byval align 4 %X ) nounwind ; [#uses=0]
1313 br label %return
1414 return: ; preds = %entry
1515 ret void
55
66 define i32 @foo(%struct.x* byval %a) nounwind {
77 ; CHECK: ret i32 1
8 %tmp1 = tail call i32 (...)* @bar( %struct.x* %a ) nounwind ; [#uses=0]
8 %tmp1 = tail call i32 (...) @bar( %struct.x* %a ) nounwind ; [#uses=0]
99 %tmp2 = getelementptr %struct.x, %struct.x* %a, i32 0, i32 0 ; [#uses=2]
1010 store i32 1, i32* %tmp2, align 4
1111 store i32 2, i32* @g, align 4
123123
124124 for.end12: ; preds = %for.cond
125125 %6 = load i32, i32* @g, align 4
126 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0), i32 %6)
126 %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0), i32 %6)
127127 store i32 0, i32* @g, align 4
128128 store i32 0, i32* %i, align 4
129129 br label %for.cond13
164164
165165 for.end24: ; preds = %for.cond13
166166 %11 = load i32, i32* @g, align 4
167 %call25 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0), i32 %11)
167 %call25 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0), i32 %11)
168168 store i32 0, i32* @g, align 4
169169 store i32 0, i32* %i, align 4
170170 br label %for.cond26
187187
188188 for.end31: ; preds = %for.cond26
189189 %14 = load i32, i32* @g, align 4
190 %call32 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0), i32 %14)
190 %call32 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0), i32 %14)
191191 store i32 0, i32* @g, align 4
192192 %15 = load i32, i32* %retval
193193 ret i32 %15
1111
1212 define void @caller() {
1313 entry:
14 call void (...)* @callee( void (...)* @callee )
14 call void (...) @callee( void (...)* @callee )
1515 unreachable
1616 }
2424 %0 = load volatile i32, i32* getelementptr inbounds (%struct.anon, %struct.anon* @b, i64 0, i32 0), align 4
2525 store i32 %0, i32* @c, align 4
2626 tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* bitcast (%struct.anon* @b to i8*), i8* bitcast (%struct.anon* @a to i8*), i64 12, i32 4, i1 false) nounwind
27 %call = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i32 %0) nounwind
27 %call = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i32 %0) nounwind
2828 ret i32 0
2929 }
8989 select i1 true, void ()* @f3, void ()* @f4
9090 store void ()* @f5, void ()** %x
9191 call void @f6()
92 call void (void ()*, void ()*)* bitcast (void ()* @f7 to void (void ()*, void ()*)*)(void ()* @f8, void ()* @f9)
92 call void (void ()*, void ()*) bitcast (void ()* @f7 to void (void ()*, void ()*)*)(void ()* @f8, void ()* @f9)
9393 invoke void @f10() to label %exit unwind label %unwind
9494
9595 exit:
1212 bb: ; preds = %bb.nph, %bb1
1313 %indvar = phi i32 [ 0, %bb.nph ], [ %indvar.next, %bb1 ] ; [#uses=2]
1414 %argc_addr.04 = add i32 %indvar, %argc ; [#uses=1]
15 tail call void (...)* @Test() nounwind
15 tail call void (...) @Test() nounwind
1616 %1 = add i32 %argc_addr.04, 1 ; [#uses=1]
1717 br label %bb1
1818
1313 br label %lbl_818
1414
1515 lbl_818: ; preds = %for.end, %entry
16 call void (...)* @func_27()
16 call void (...) @func_27()
1717 store i32 0, i32* @g_814, align 4
1818 br label %for.cond
1919
6464 br label %for.cond
6565
6666 for.end: ; preds = %for.body, %for.cond
67 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i32 %g_4.0) nounwind ; [#uses=0]
67 %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i32 %g_4.0) nounwind ; [#uses=0]
6868 ret i32 0
6969 }
7070
6262
6363 for.end9: ; preds = %entry.for.end9_crit_edge, %for.cond.for.end9_crit_edge
6464 %3 = phi i32 [ %.pre, %entry.for.end9_crit_edge ], [ %shl, %for.cond.for.end9_crit_edge ]
65 %call = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i32 %3) #2
65 %call = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i32 %3) #2
6666 br label %return
6767
6868 return.loopexit.split: ; preds = %for.cond1.preheader.lr.ph
2121 %alloca = alloca i1
2222 %load2 = load i1, i1* %alloca
2323 %load3 = load i32, i32 addrspace(1)* %dparam
24 %tok = tail call i32 (i1 ()*, i32, i32, ...)* @llvm.experimental.gc.statepoint.p0f_i1f(i1 ()* @return_i1, i32 0, i32 0, i32 0, i32 addrspace(1)* %dparam)
24 %tok = tail call i32 (i1 ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i1f(i1 ()* @return_i1, i32 0, i32 0, i32 0, i32 addrspace(1)* %dparam)
2525 %relocate = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(i32 %tok, i32 4, i32 4)
2626 %load4 = load i32, i32 addrspace(1)* %relocate
2727 %nparam = getelementptr i32, i32 addrspace(1)* %dparam, i32 5
66 declare void (i32)* @foo()
77
88 define void @test() {
9 call void (i32)* ()* @foo( ) ; <%ty*>:1 [#uses=0]
9 call void (i32)* () @foo( ) ; <%ty*>:1 [#uses=0]
1010 ret void
1111 }
1212
33 ; RUN: verify-uselistorder %s
44
55 define void @test() {
6 call void (...)* bitcast (void (i16*, i32)* @AddString to void (...)*)( i16* null, i32 0 )
6 call void (...) bitcast (void (i16*, i32)* @AddString to void (...)*)( i16* null, i32 0 )
77 ret void
88 }
99
1010 define void @AddString(i16* %tmp.124, i32 %tmp.127) {
11 call void (...)* bitcast (void (i16*, i32)* @AddString to void (...)*)( i16* %tmp.124, i32 %tmp.127 )
11 call void (...) bitcast (void (i16*, i32)* @AddString to void (...)*)( i16* %tmp.124, i32 %tmp.127 )
1212 ret void
1313 }
1414
55 declare void @foo(...)
66
77 define void @bar() {
8 call void (...)* @foo(%struct* byval null )
8 call void (...) @foo(%struct* byval null )
99 ret void
1010 }
77 declare i8* @f(i8*, ...)
88
99 define i8* @f_thunk(i8* %this) {
10 %rv = musttail call i8* (i8*, ...)* @f(i8* %this, ...)
10 %rv = musttail call i8* (i8*, ...) @f(i8* %this, ...)
1111 ; CHECK: error: unexpected ellipsis in argument list for musttail call in non-varargs function
1212 ret i8* %rv
1313 }
66 declare i8* @f(i8*, ...)
77
88 define i8* @f_thunk(i8* %this, ...) {
9 %rv = musttail call i8* (i8*, ...)* @f(i8* %this)
9 %rv = musttail call i8* (i8*, ...) @f(i8* %this)
1010 ; CHECK: error: expected '...' at end of argument list for musttail call in varargs function
1111 ret i8* %rv
1212 }
66 declare i8* @f(i8*, ...)
77
88 define i8* @f_thunk(i8* %this, ...) {
9 %rv = musttail call i8* (i8*, ...)* @f(i8* %this, ...)
9 %rv = musttail call i8* (i8*, ...) @f(i8* %this, ...)
1010 ret i8* %rv
1111 }
1212 ; CHECK-LABEL: define i8* @f_thunk(i8* %this, ...)
13 ; CHECK: %rv = musttail call i8* (i8*, ...)* @f(i8* %this, ...)
13 ; CHECK: %rv = musttail call i8* (i8*, ...) @f(i8* %this, ...)
172172 ; CHECK-NEXT: %res2 = tail call i32 @test(i32 %x)
173173 %res2 = tail call i32 @test(i32 %x)
174174
175 ; CHECK-NEXT: %res3 = call i32 (i8*, ...)* @printf(i8* %msg, i32 12, i8 42)
176 %res3 = call i32 (i8*, ...)* @printf(i8* %msg, i32 12, i8 42)
175 ; CHECK-NEXT: %res3 = call i32 (i8*, ...) @printf(i8* %msg, i32 12, i8 42)
176 %res3 = call i32 (i8*, ...) @printf(i8* %msg, i32 12, i8 42)
177177
178178 ret void
179179 }
6363 ; CHECK-LABEL: test_varargs_stackalign:
6464 ; CHECK-DARWINPCS: stp {{w[0-9]+}}, {{w[0-9]+}}, [sp, #16]
6565
66 call void(...)* @callee([3 x float] undef, [2 x float] [float 1.0, float 2.0])
66 call void(...) @callee([3 x float] undef, [2 x float] [float 1.0, float 2.0])
6767 ret void
6868 }
6969
1515 %0 = load double, double* %d.addr, align 8
1616 %1 = load double, double* %d.addr, align 8
1717 %conv = fptoui double %1 to i64
18 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i32 0, i32 0), double %0, i64 %conv)
18 %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i32 0, i32 0), double %0, i64 %conv)
1919 %2 = load double, double* %d.addr, align 8
2020 %3 = load double, double* %d.addr, align 8
2121 %conv1 = fptoui double %3 to i32
22 %call2 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str1, i32 0, i32 0), double %2, i32 %conv1)
22 %call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str1, i32 0, i32 0), double %2, i32 %conv1)
2323 ret void
2424 }
2525
3636 %conv = fpext float %0 to double
3737 %1 = load float, float* %f.addr, align 4
3838 %conv1 = fptoui float %1 to i64
39 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str2, i32 0, i32 0), double %conv, i64 %conv1)
39 %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str2, i32 0, i32 0), double %conv, i64 %conv1)
4040 %2 = load float, float* %f.addr, align 4
4141 %conv2 = fpext float %2 to double
4242 %3 = load float, float* %f.addr, align 4
4343 %conv3 = fptoui float %3 to i32
44 %call4 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str3, i32 0, i32 0), double %conv2, i32 %conv3)
44 %call4 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str3, i32 0, i32 0), double %conv2, i32 %conv3)
4545 ret void
4646 }
4747
7777 ; Under AAPCS variadic functions have the same calling convention as
7878 ; others. The extra arguments should go in registers rather than on the stack.
7979 define void @test_variadic() {
80 call void(i32, ...)* @variadic(i32 0, i64 1, double 2.0)
80 call void(i32, ...) @variadic(i32 0, i64 1, double 2.0)
8181 ; CHECK: fmov d0, #2.0
8282 ; CHECK: orr w1, wzr, #0x1
8383 ; CHECK: bl variadic
9393 %10 = load i32, i32* %a10, align 4
9494 %11 = load i32, i32* %a11, align 4
9595 %12 = load i32, i32* %a12, align 4
96 call void (i32, i32, i32, i32, i32, i32, i32, i32, i32, ...)* @fn9(i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i32 %8, i32 %9, i32 %10, i32 %11, i32 %12)
96 call void (i32, i32, i32, i32, i32, i32, i32, i32, i32, ...) @fn9(i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i32 %8, i32 %9, i32 %10, i32 %11, i32 %12)
9797 ret i32 0
9898 }
9999
132132 store <4 x i32> %y, <4 x i32>* %y.addr, align 16
133133 %0 = load i32, i32* %x.addr, align 4
134134 %1 = load <4 x i32>, <4 x i32>* %y.addr, align 16
135 call void (i8*, ...)* @foo(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i32 %0, <4 x i32> %1)
135 call void (i8*, ...) @foo(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i32 %0, <4 x i32> %1)
136136 ret void
137137 }
138138
185185 %1 = load i32, i32* %x.addr, align 4
186186 %2 = bitcast %struct.s41* %s41 to i128*
187187 %3 = load i128, i128* %2, align 1
188 call void (i8*, ...)* @foo2(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i32 %1, i128 %3)
188 call void (i8*, ...) @foo2(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i32 %1, i128 %3)
189189 ret void
190190 }
77 i64 %v17, i64 %v18, i64 %v19, i64 %v20, i64 %v21, i64 %v22, i64 %v23, i64 %v24,
88 i64 %v25, i64 %v26, i64 %v27, i64 %v28, i64 %v29, i64 %v30, i64 %v31, i64 %v32) {
99 entry:
10 %result = tail call anyregcc i64 (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i64 12, i32 15, i8* inttoptr (i64 0 to i8*), i32 32,
10 %result = tail call anyregcc i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 12, i32 15, i8* inttoptr (i64 0 to i8*), i32 32,
1111 i64 %v1, i64 %v2, i64 %v3, i64 %v4, i64 %v5, i64 %v6, i64 %v7, i64 %v8,
1212 i64 %v9, i64 %v10, i64 %v11, i64 %v12, i64 %v13, i64 %v14, i64 %v15, i64 %v16,
1313 i64 %v17, i64 %v18, i64 %v19, i64 %v20, i64 %v21, i64 %v22, i64 %v23, i64 %v24,
5454 ; CHECK-NEXT: .long 3
5555 define i64 @test() nounwind ssp uwtable {
5656 entry:
57 call anyregcc void (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.void(i64 0, i32 16, i8* null, i32 2, i32 1, i32 2, i64 3)
57 call anyregcc void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 0, i32 16, i8* null, i32 2, i32 1, i32 2, i64 3)
5858 ret i64 0
5959 }
6060
7676 define i64 @property_access1(i8* %obj) nounwind ssp uwtable {
7777 entry:
7878 %f = inttoptr i64 281474417671919 to i8*
79 %ret = call anyregcc i64 (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i64 1, i32 20, i8* %f, i32 1, i8* %obj)
79 %ret = call anyregcc i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 1, i32 20, i8* %f, i32 1, i8* %obj)
8080 ret i64 %ret
8181 }
8282
9999 entry:
100100 %obj = alloca i64, align 8
101101 %f = inttoptr i64 281474417671919 to i8*
102 %ret = call anyregcc i64 (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i64 2, i32 20, i8* %f, i32 1, i64* %obj)
102 %ret = call anyregcc i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 2, i32 20, i8* %f, i32 1, i64* %obj)
103103 ret i64 %ret
104104 }
105105
122122 entry:
123123 %obj = alloca i64, align 8
124124 %f = inttoptr i64 281474417671919 to i8*
125 %ret = call anyregcc i64 (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i64 3, i32 20, i8* %f, i32 0, i64* %obj)
125 %ret = call anyregcc i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 3, i32 20, i8* %f, i32 0, i64* %obj)
126126 ret i64 %ret
127127 }
128128
204204 define i64 @anyreg_test1(i8* %a1, i8* %a2, i8* %a3, i8* %a4, i8* %a5, i8* %a6, i8* %a7, i8* %a8, i8* %a9, i8* %a10, i8* %a11, i8* %a12, i8* %a13) nounwind ssp uwtable {
205205 entry:
206206 %f = inttoptr i64 281474417671919 to i8*
207 %ret = call anyregcc i64 (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i64 4, i32 20, i8* %f, i32 13, i8* %a1, i8* %a2, i8* %a3, i8* %a4, i8* %a5, i8* %a6, i8* %a7, i8* %a8, i8* %a9, i8* %a10, i8* %a11, i8* %a12, i8* %a13)
207 %ret = call anyregcc i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 4, i32 20, i8* %f, i32 13, i8* %a1, i8* %a2, i8* %a3, i8* %a4, i8* %a5, i8* %a6, i8* %a7, i8* %a8, i8* %a9, i8* %a10, i8* %a11, i8* %a12, i8* %a13)
208208 ret i64 %ret
209209 }
210210
286286 define i64 @anyreg_test2(i8* %a1, i8* %a2, i8* %a3, i8* %a4, i8* %a5, i8* %a6, i8* %a7, i8* %a8, i8* %a9, i8* %a10, i8* %a11, i8* %a12, i8* %a13) nounwind ssp uwtable {
287287 entry:
288288 %f = inttoptr i64 281474417671919 to i8*
289 %ret = call anyregcc i64 (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i64 5, i32 20, i8* %f, i32 8, i8* %a1, i8* %a2, i8* %a3, i8* %a4, i8* %a5, i8* %a6, i8* %a7, i8* %a8, i8* %a9, i8* %a10, i8* %a11, i8* %a12, i8* %a13)
289 %ret = call anyregcc i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 5, i32 20, i8* %f, i32 8, i8* %a1, i8* %a2, i8* %a3, i8* %a4, i8* %a5, i8* %a6, i8* %a7, i8* %a8, i8* %a9, i8* %a10, i8* %a11, i8* %a12, i8* %a13)
290290 ret i64 %ret
291291 }
292292
314314 ; CHECK-NEXT: .long 0
315315 define i64 @patchpoint_spilldef(i64 %p1, i64 %p2, i64 %p3, i64 %p4) {
316316 entry:
317 %result = tail call anyregcc i64 (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i64 12, i32 16, i8* inttoptr (i64 0 to i8*), i32 2, i64 %p1, i64 %p2)
317 %result = tail call anyregcc i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 12, i32 16, i8* inttoptr (i64 0 to i8*), i32 2, i64 %p1, i64 %p2)
318318 tail call void asm sideeffect "nop", "~{x0},~{x1},~{x2},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31}"() nounwind
319319 ret i64 %result
320320 }
354354 define i64 @patchpoint_spillargs(i64 %p1, i64 %p2, i64 %p3, i64 %p4) {
355355 entry:
356356 tail call void asm sideeffect "nop", "~{x0},~{x1},~{x2},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31}"() nounwind
357 %result = tail call anyregcc i64 (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i64 13, i32 16, i8* inttoptr (i64 0 to i8*), i32 2, i64 %p1, i64 %p2, i64 %p3, i64 %p4)
357 %result = tail call anyregcc i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 13, i32 16, i8* inttoptr (i64 0 to i8*), i32 2, i64 %p1, i64 %p2, i64 %p3, i64 %p4)
358358 ret i64 %result
359359 }
360360
3838 ; CHECK: fcvt s0, d0
3939 ; CHECK: movi.4s v[[CONST:[0-9]+]], #0x80, lsl #24
4040 ; CHECK: bit.16b v{{[0-9]+}}, v0, v[[CONST]]
41 %0 = tail call double (...)* @bar() nounwind
41 %0 = tail call double (...) @bar() nounwind
4242 %1 = fptrunc double %0 to float
4343 %2 = tail call float @copysignf(float 5.000000e-01, float %1) nounwind readnone
4444 %3 = fadd float %1, %2
99 ; CHECK: ret
1010 define void @g() nounwind ssp {
1111 entry:
12 tail call void (i32, ...)* @f(i32 0, i32 0) nounwind
12 tail call void (i32, ...) @f(i32 0, i32 0) nounwind
1313 ret void
1414 }
1515
88 define void @clobberScratch(i32* %p) {
99 %v = load i32, i32* %p
1010 tail call void asm sideeffect "nop", "~{x0},~{x1},~{x2},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x30},~{x31}"() nounwind
11 tail call void (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.void(i64 5, i32 20, i8* null, i32 0, i32* %p, i32 %v)
11 tail call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 5, i32 20, i8* null, i32 0, i32* %p, i32 %v)
1212 store i32 %v, i32* %p
1313 ret void
1414 }
2222 ; FAST-NEXT: movk x16, #0xbeef
2323 ; FAST-NEXT: blr x16
2424 %resolveCall2 = inttoptr i64 281474417671919 to i8*
25 %result = tail call webkit_jscc i64 (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i64 5, i32 20, i8* %resolveCall2, i32 2, i64 %p4, i64 %p2)
25 %result = tail call webkit_jscc i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 5, i32 20, i8* %resolveCall2, i32 2, i64 %p4, i64 %p2)
2626 %resolveCall3 = inttoptr i64 244837814038255 to i8*
27 tail call webkit_jscc void (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.void(i64 6, i32 20, i8* %resolveCall3, i32 2, i64 %p4, i64 %result)
27 tail call webkit_jscc void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 6, i32 20, i8* %resolveCall3, i32 2, i64 %p4, i64 %result)
2828 ret void
2929 }
3030
5858 ; FAST-NEXT: movk x16, #0xbeef
5959 ; FAST-NEXT: blr x16
6060 %call = inttoptr i64 281474417671919 to i8*
61 %result = call webkit_jscc i64 (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i64 7, i32 20, i8* %call, i32 6, i64 %callee, i64 2, i64 undef, i32 4, i32 undef, i64 6)
61 %result = call webkit_jscc i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 7, i32 20, i8* %call, i32 6, i64 %callee, i64 2, i64 undef, i32 4, i32 undef, i64 6)
6262 ret i64 %result
6363 }
6464
100100 ; FAST-NEXT: movk x16, #0xbeef
101101 ; FAST-NEXT: blr x16
102102 %call = inttoptr i64 281474417671919 to i8*
103 %result = call webkit_jscc i64 (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i64 7, i32 20, i8* %call, i32 10, i64 %callee, i64 2, i64 undef, i32 4, i32 undef, i64 6, i32 undef, i32 8, i32 undef, i64 10)
103 %result = call webkit_jscc i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 7, i32 20, i8* %call, i32 10, i64 %callee, i64 2, i64 undef, i32 4, i32 undef, i64 6, i32 undef, i32 8, i32 undef, i64 10)
104104 ret i64 %result
105105 }
106106
1515 ; CHECK-NEXT: blr x16
1616 ; CHECK: ret
1717 %resolveCall2 = inttoptr i64 244837814094590 to i8*
18 %result = tail call i64 (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i64 2, i32 20, i8* %resolveCall2, i32 4, i64 %p1, i64 %p2, i64 %p3, i64 %p4)
18 %result = tail call i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 2, i32 20, i8* %resolveCall2, i32 4, i64 %p1, i64 %p2, i64 %p3, i64 %p4)
1919 %resolveCall3 = inttoptr i64 244837814094591 to i8*
20 tail call void (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.void(i64 3, i32 20, i8* %resolveCall3, i32 2, i64 %p1, i64 %result)
20 tail call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 3, i32 20, i8* %resolveCall3, i32 2, i64 %p1, i64 %result)
2121 ret i64 %result
2222 }
2323
3737 store i64 11, i64* %metadata
3838 store i64 12, i64* %metadata
3939 store i64 13, i64* %metadata
40 call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 4, i32 0, i64* %metadata)
40 call void (i64, i32, ...) @llvm.experimental.stackmap(i64 4, i32 0, i64* %metadata)
4141 ret void
4242 }
4343
5050 %tmp80 = add i64 %tmp79, -16
5151 %tmp81 = inttoptr i64 %tmp80 to i64*
5252 %tmp82 = load i64, i64* %tmp81, align 8
53 tail call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 14, i32 8, i64 %arg, i64 %tmp2, i64 %tmp10, i64 %tmp82)
54 tail call void (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.void(i64 15, i32 32, i8* null, i32 3, i64 %arg, i64 %tmp10, i64 %tmp82)
53 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 14, i32 8, i64 %arg, i64 %tmp2, i64 %tmp10, i64 %tmp82)
54 tail call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 15, i32 32, i8* null, i32 3, i64 %arg, i64 %tmp10, i64 %tmp82)
5555 %tmp83 = load i64, i64* %tmp33, align 8
5656 %tmp84 = add i64 %tmp83, -24
5757 %tmp85 = inttoptr i64 %tmp84 to i64*
5858 %tmp86 = load i64, i64* %tmp85, align 8
59 tail call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 17, i32 8, i64 %arg, i64 %tmp10, i64 %tmp86)
60 tail call void (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.void(i64 18, i32 32, i8* null, i32 3, i64 %arg, i64 %tmp10, i64 %tmp86)
59 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 17, i32 8, i64 %arg, i64 %tmp10, i64 %tmp86)
60 tail call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 18, i32 32, i8* null, i32 3, i64 %arg, i64 %tmp10, i64 %tmp86)
6161 ret i64 10
6262 }
6363
7373 ; CHECK-NEXT: nop
7474 ; CHECK-NEXT: ldp
7575 ; CHECK-NEXT: ret
76 %result = tail call i64 (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i64 5, i32 20, i8* null, i32 2, i64 %p1, i64 %p2)
76 %result = tail call i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 5, i32 20, i8* null, i32 2, i64 %p1, i64 %p2)
7777 ret void
7878 }
7979
77 ; CHECK: nop
88 ; CHECK-NEXT: nop
99 ; CHECK-NOT: nop
10 tail call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 0, i32 16)
10 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 0, i32 16)
1111 ret void
1212 }
1313
7777 define void @constantargs() {
7878 entry:
7979 %0 = inttoptr i64 244837814094590 to i8*
80 tail call void (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.void(i64 1, i32 20, i8* %0, i32 0, i64 65535, i64 65536, i64 4294967295, i64 4294967296)
80 tail call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 1, i32 20, i8* %0, i32 0, i64 65535, i64 65536, i64 4294967295, i64 4294967296)
8181 ret void
8282 }
8383
9999 ; Runtime void->void call.
100100 call void inttoptr (i64 244837814094590 to void ()*)()
101101 ; Followed by inline OSR patchpoint with 12-byte shadow and 2 live vars.
102 call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 3, i32 12, i64 %a, i64 %b)
102 call void (i64, i32, ...) @llvm.experimental.stackmap(i64 3, i32 12, i64 %a, i64 %b)
103103 ret void
104104 }
105105
125125 cold:
126126 ; OSR patchpoint with 12-byte nop-slide and 2 live vars.
127127 %thunk = inttoptr i64 244837814094590 to i8*
128 call void (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.void(i64 4, i32 20, i8* %thunk, i32 0, i64 %a, i64 %b)
128 call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 4, i32 20, i8* %thunk, i32 0, i64 %a, i64 %b)
129129 unreachable
130130 ret:
131131 ret void
141141 define i64 @propertyRead(i64* %obj) {
142142 entry:
143143 %resolveRead = inttoptr i64 244837814094590 to i8*
144 %result = call i64 (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i64 5, i32 20, i8* %resolveRead, i32 1, i64* %obj)
144 %result = call i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 5, i32 20, i8* %resolveRead, i32 1, i64* %obj)
145145 %add = add i64 %result, 3
146146 ret i64 %add
147147 }
161161 define void @propertyWrite(i64 %dummy1, i64* %obj, i64 %dummy2, i64 %a) {
162162 entry:
163163 %resolveWrite = inttoptr i64 244837814094590 to i8*
164 call anyregcc void (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.void(i64 6, i32 20, i8* %resolveWrite, i32 2, i64* %obj, i64 %a)
164 call anyregcc void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 6, i32 20, i8* %resolveWrite, i32 2, i64* %obj, i64 %a)
165165 ret void
166166 }
167167
183183 define void @jsVoidCall(i64 %dummy1, i64* %obj, i64 %arg, i64 %l1, i64 %l2) {
184184 entry:
185185 %resolveCall = inttoptr i64 244837814094590 to i8*
186 call void (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.void(i64 7, i32 20, i8* %resolveCall, i32 2, i64* %obj, i64 %arg, i64 %l1, i64 %l2)
186 call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 7, i32 20, i8* %resolveCall, i32 2, i64* %obj, i64 %arg, i64 %l1, i64 %l2)
187187 ret void
188188 }
189189
205205 define i64 @jsIntCall(i64 %dummy1, i64* %obj, i64 %arg, i64 %l1, i64 %l2) {
206206 entry:
207207 %resolveCall = inttoptr i64 244837814094590 to i8*
208 %result = call i64 (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.i64(i64 8, i32 20, i8* %resolveCall, i32 2, i64* %obj, i64 %arg, i64 %l1, i64 %l2)
208 %result = call i64 (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.i64(i64 8, i32 20, i8* %resolveCall, i32 2, i64* %obj, i64 %arg, i64 %l1, i64 %l2)
209209 %add = add i64 %result, 3
210210 ret i64 %add
211211 }
225225 ; CHECK-NEXT: .short 29
226226 define void @spilledValue(i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3, i64 %arg4, i64 %l0, i64 %l1, i64 %l2, i64 %l3, i64 %l4, i64 %l5, i64 %l6, i64 %l7, i64 %l8, i64 %l9, i64 %l10, i64 %l11, i64 %l12, i64 %l13, i64 %l14, i64 %l15, i64 %l16, i64 %l17, i64 %l18, i64 %l19, i64 %l20, i64 %l21, i64 %l22, i64 %l23, i64 %l24, i64 %l25, i64 %l26, i64 %l27) {
227227 entry:
228 call void (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.void(i64 11, i32 20, i8* null, i32 5, i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3, i64 %arg4, i64 %l0, i64 %l1, i64 %l2, i64 %l3, i64 %l4, i64 %l5, i64 %l6, i64 %l7, i64 %l8, i64 %l9, i64 %l10, i64 %l11, i64 %l12, i64 %l13, i64 %l14, i64 %l15, i64 %l16, i64 %l17, i64 %l18, i64 %l19, i64 %l20, i64 %l21, i64 %l22, i64 %l23, i64 %l24, i64 %l25, i64 %l26, i64 %l27)
228 call void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 11, i32 20, i8* null, i32 5, i64 %arg0, i64 %arg1, i64 %arg2, i64 %arg3, i64 %arg4, i64 %l0, i64 %l1, i64 %l2, i64 %l3, i64 %l4, i64 %l5, i64 %l6, i64 %l7, i64 %l8, i64 %l9, i64 %l10, i64 %l11, i64 %l12, i64 %l13, i64 %l14, i64 %l15, i64 %l16, i64 %l17, i64 %l18, i64 %l19, i64 %l20, i64 %l21, i64 %l22, i64 %l23, i64 %l24, i64 %l25, i64 %l26, i64 %l27)
229229 ret void
230230 }
231231
244244 ; CHECK-NEXT: .short 29
245245 define webkit_jscc void @spilledStackMapValue(i64 %l0, i64 %l1, i64 %l2, i64 %l3, i64 %l4, i64 %l5, i64 %l6, i64 %l7, i64 %l8, i64 %l9, i64 %l10, i64 %l11, i64 %l12, i64 %l13, i64 %l14, i64 %l15, i64 %l16, i64 %l17, i64 %l18, i64 %l19, i64 %l20, i64 %l21, i64 %l22, i64 %l23, i64 %l24, i64 %l25, i64 %l26, i64 %l27, i64 %l28, i64 %l29) {
246246 entry:
247 call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 12, i32 16, i64 %l0, i64 %l1, i64 %l2, i64 %l3, i64 %l4, i64 %l5, i64 %l6, i64 %l7, i64 %l8, i64 %l9, i64 %l10, i64 %l11, i64 %l12, i64 %l13, i64 %l14, i64 %l15, i64 %l16, i64 %l17, i64 %l18, i64 %l19, i64 %l20, i64 %l21, i64 %l22, i64 %l23, i64 %l24, i64 %l25, i64 %l26, i64 %l27, i64 %l28, i64 %l29)
247 call void (i64, i32, ...) @llvm.experimental.stackmap(i64 12, i32 16, i64 %l0, i64 %l1, i64 %l2, i64 %l3, i64 %l4, i64 %l5, i64 %l6, i64 %l7, i64 %l8, i64 %l9, i64 %l10, i64 %l11, i64 %l12, i64 %l13, i64 %l14, i64 %l15, i64 %l16, i64 %l17, i64 %l18, i64 %l19, i64 %l20, i64 %l21, i64 %l22, i64 %l23, i64 %l24, i64 %l25, i64 %l26, i64 %l27, i64 %l28, i64 %l29)
248248 ret void
249249 }
250250
262262 ; CHECK-NEXT: .long 33
263263
264264 define void @liveConstant() {
265 tail call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 15, i32 8, i32 33)
265 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 15, i32 8, i32 33)
266266 ret void
267267 }
268268
279279 ; CHECK-NEXT: .long -{{[0-9]+}}
280280 define void @clobberLR(i32 %a) {
281281 tail call void asm sideeffect "nop", "~{x0},~{x1},~{x2},~{x3},~{x4},~{x5},~{x6},~{x7},~{x8},~{x9},~{x10},~{x11},~{x12},~{x13},~{x14},~{x15},~{x16},~{x17},~{x18},~{x19},~{x20},~{x21},~{x22},~{x23},~{x24},~{x25},~{x26},~{x27},~{x28},~{x29},~{x31}"() nounwind
282 tail call void (i64, i32, ...)* @llvm.experimental.stackmap(i64 16, i32 8, i32 %a)
282 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 16, i32 8, i32 %a)
283283 ret void
284284 }
285285
2929 unreachable
3030
3131 if.end50.thread:
32 tail call void (i8*, ...)* @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str1, i64 0, i64 0), i32 125)
33 tail call void (i8*, ...)* @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str1, i64 0, i64 0), i32 128)
32 tail call void (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str1, i64 0, i64 0), i32 125)
33 tail call void (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str1, i64 0, i64 0), i32 128)
3434 unreachable
3535
3636 invoke.cont33:
37 tail call void (i8*, ...)* @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str1, i64 0, i64 0), i32 119)
37 tail call void (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str1, i64 0, i64 0), i32 119)
3838 unreachable
3939
4040 invoke.cont41:
5050 br label %finally.catchall
5151
5252 finally.catchall:
53 tail call void (i8*, ...)* @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str1, i64 0, i64 0), i32 125)
53 tail call void (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str1, i64 0, i64 0), i32 125)
5454 unreachable
5555 }
5656
1919 %DHSelect = select i1 %tmp8, i32 %tmp9, i32 %tmp10
2020 store i32 %DHSelect, i32* %i32X, align 4
2121 %tmp15 = load i32, i32* %i32X, align 4
22 %tmp17 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str2, i32 0, i32 0), i32 %tmp15)
22 %tmp17 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str2, i32 0, i32 0), i32 %tmp15)
2323 ret i32 0
2424
2525 ; CHECK: main:
3838 ; Align
3939 ; CHECK-NEXT: .align 3
4040 %1 = select i1 %c, i64 1, i64 2
41 call anyregcc void (i64, i32, i8*, i32, ...)* @llvm.experimental.patchpoint.void(i64 1, i32 32, i8* null, i32 0)
41 call anyregcc void (i64, i32, i8*, i32, ...) @llvm.experimental.patchpoint.void(i64 1, i32 32, i8* null, i32 0)
4242 ret i64 %1
4343 }
4444
8282 %tmp884885 = inttoptr i64 %tmp10959 to %struct.tree_identifier* ; <%struct.tree_identifier*> [#uses=1]
8383 %tmp887 = getelementptr %struct.tree_identifier, %struct.tree_identifier* %tmp884885, i32 0, i32 1, i32 0 ; [#uses=1]
8484 %tmp888 = load i8*, i8** %tmp887 ; [#uses=1]
85 tail call void (i32, ...)* @error( i32 undef, i8* %tmp888 )
85 tail call void (i32, ...) @error( i32 undef, i8* %tmp888 )
8686 ret void
8787
8888 cond_true918: ; preds = %cond_false841
44 %A = alloca [1123 x i32], align 16 ; <[1123 x i32]*> [#uses=1]
55 %B = alloca [3123 x i32], align 16 ; <[3123 x i32]*> [#uses=1]
66 %C = alloca [12312 x i32], align 16 ; <[12312 x i32]*> [#uses=1]
7 %tmp = call i32 (...)* @bar( [3123 x i32]* %B, [1123 x i32]* %A, [12312 x i32]* %C ) ; [#uses=0]
7 %tmp = call i32 (...) @bar( [3123 x i32]* %B, [1123 x i32]* %A, [12312 x i32]* %C ) ; [#uses=0]
88 ret i32 undef
99 }
1010
99 entry:
1010 %tmp1 = getelementptr %struct.B, %struct.B* %this, i32 0, i32 0 ; [#uses=1]
1111 %tmp2 = load i32, i32* %tmp1 ; [#uses=1]
12 %tmp4 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([7 x i8], [7 x i8]* @str, i32 0, i32 0), i32 %tmp2 ) ; [#uses=0]
12 %tmp4 = tail call i32 (i8*, ...) @printf( i8* getelementptr ([7 x i8], [7 x i8]* @str, i32 0, i32 0), i32 %tmp2 ) ; [#uses=0]
1313 ret void
1414 }
1515
1919 entry:
2020 %tmp1 = getelementptr %struct.B, %struct.B* %this, i32 0, i32 0 ; [#uses=1]
2121 %tmp2 = load i32, i32* %tmp1 ; [#uses=1]
22 %tmp4 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([7 x i8], [7 x i8]* @str1, i32 0, i32 0), i32 %tmp2 ) ; [#uses=0]
22 %tmp4 = tail call i32 (i8*, ...) @printf( i8* getelementptr ([7 x i8], [7 x i8]* @str1, i32 0, i32 0), i32 %tmp2 ) ; [#uses=0]
2323 ret void
2424 }
2525
9292 %tmp42.i348 = sub i32 0, %tmp2930.i ; [#uses=1]
9393 %tmp45.i = getelementptr %struct.TestObj, %struct.TestObj* %tmp1273, i32 0, i32 0 ; [#uses=2]
9494 %tmp48.i = load i8*, i8** %tmp45.i ; [#uses=1]
95 %tmp50.i350 = call i32 (i8*, i8*, ...)* @sprintf( i8* getelementptr ([256 x i8], [256 x i8]* @Msg, i32 0, i32 0), i8* getelementptr ([48 x i8], [48 x i8]* @.str53615, i32 0, i32 0), i8* null, i8** %tmp45.i, i8* %tmp48.i ) ; [#uses=0]
95 %tmp50.i350 = call i32 (i8*, i8*, ...) @sprintf( i8* getelementptr ([256 x i8], [256 x i8]* @Msg, i32 0, i32 0), i8* getelementptr ([48 x i8], [48 x i8]* @.str53615, i32 0, i32 0), i8* null, i8** %tmp45.i, i8* %tmp48.i ) ; [#uses=0]
9696 br i1 false, label %cond_true.i632.i, label %Ut_TraceMsg.exit648.i
9797
9898 cond_true.i632.i: ; preds = %cond_true1272
2323 br i1 %toBool, label %cond_true, label %cond_false
2424
2525 cond_true: ; preds = %entry
26 %tmp3 = call i32 (...)* @bar( ) ; [#uses=0]
27 %tmp4 = call i32 (...)* @baz( i32 5, i32 6 ) ; [#uses=0]
26 %tmp3 = call i32 (...) @bar( ) ; [#uses=0]
27 %tmp4 = call i32 (...) @baz( i32 5, i32 6 ) ; [#uses=0]
2828 br label %cond_next
2929
3030 cond_false: ; preds = %entry
31 %tmp5 = call i32 (...)* @foo( ) ; [#uses=0]
32 %tmp6 = call i32 (...)* @baz( i32 5, i32 6 ) ; [#uses=0]
31 %tmp5 = call i32 (...) @foo( ) ; [#uses=0]
32 %tmp6 = call i32 (...) @baz( i32 5, i32 6 ) ; [#uses=0]
3333 br label %cond_next
3434
3535 cond_next: ; preds = %cond_false, %cond_true
4040 br i1 %toBool10, label %cond_true11, label %cond_false15
4141
4242 cond_true11: ; preds = %cond_next
43 %tmp13 = call i32 (...)* @foo( ) ; [#uses=0]
44 %tmp14 = call i32 (...)* @quux( i32 3, i32 4 ) ; [#uses=0]
43 %tmp13 = call i32 (...) @foo( ) ; [#uses=0]
44 %tmp14 = call i32 (...) @quux( i32 3, i32 4 ) ; [#uses=0]
4545 br label %cond_next18
4646
4747 cond_false15: ; preds = %cond_next
48 %tmp16 = call i32 (...)* @bar( ) ; [#uses=0]
49 %tmp17 = call i32 (...)* @quux( i32 3, i32 4 ) ; [#uses=0]
48 %tmp16 = call i32 (...) @bar( ) ; [#uses=0]
49 %tmp17 = call i32 (...) @quux( i32 3, i32 4 ) ; [#uses=0]
5050 br label %cond_next18
5151
5252 cond_next18: ; preds = %cond_false15, %cond_true11
53 %tmp19 = call i32 (...)* @bar( ) ; [#uses=0]
53 %tmp19 = call i32 (...) @bar( ) ; [#uses=0]
5454 br label %return
5555
5656 return: ; preds = %cond_next18
2525 br i1 %toBool, label %cond_true, label %cond_false
2626
2727 cond_true: ; preds = %entry
28 %tmp3 = call i32 (...)* @bar( ) ; [#uses=0]
29 %tmp4 = call i32 (...)* @baz( i32 5, i32 6 ) ; [#uses=0]
28 %tmp3 = call i32 (...) @bar( ) ; [#uses=0]
29 %tmp4 = call i32 (...) @baz( i32 5, i32 6 ) ; [#uses=0]
3030 %tmp7 = load i32, i32* %q_addr ; [#uses=1]
3131 %tmp8 = icmp ne i32 %tmp7, 0 ; [#uses=1]
3232 %tmp89 = zext i1 %tmp8 to i8 ; [#uses=1]
3434 br i1 %toBool10, label %cond_true11, label %cond_false15
3535
3636 cond_false: ; preds = %entry
37 %tmp5 = call i32 (...)* @foo( ) ; [#uses=0]
38 %tmp6 = call i32 (...)* @baz( i32 5, i32 6 ) ; [#uses=0]
37 %tmp5 = call i32 (...) @foo( ) ; [#uses=0]
38 %tmp6 = call i32 (...) @baz( i32 5, i32 6 ) ; [#uses=0]
3939 %tmp27 = load i32, i32* %q_addr ; [#uses=1]
4040 %tmp28 = icmp ne i32 %tmp27, 0 ; [#uses=1]
4141 %tmp289 = zext i1 %tmp28 to i8 ; [#uses=1]
4343 br i1 %toBool210, label %cond_true11, label %cond_false15
4444
4545 cond_true11: ; preds = %cond_next
46 %tmp13 = call i32 (...)* @foo( ) ; [#uses=0]
47 %tmp14 = call i32 (...)* @quux( i32 3, i32 4 ) ; [#uses=0]
46 %tmp13 = call i32 (...) @foo( ) ; [#uses=0]
47 %tmp14 = call i32 (...) @quux( i32 3, i32 4 ) ; [#uses=0]
4848 br label %cond_next18
4949
5050 cond_false15: ; preds = %cond_next
51 %tmp16 = call i32 (...)* @bar( ) ; [#uses=0]
52 %tmp17 = call i32 (...)* @quux( i32 3, i32 4 ) ; [#uses=0]
51 %tmp16 = call i32 (...) @bar( ) ; [#uses=0]
52 %tmp17 = call i32 (...) @quux( i32 3, i32 4 ) ; [#uses=0]
5353 br label %cond_next18
5454
5555 cond_next18: ; preds = %cond_false15, %cond_true11
56 %tmp19 = call i32 (...)* @bar( ) ; [#uses=0]
56 %tmp19 = call i32 (...) @bar( ) ; [#uses=0]
5757 br label %return
5858
5959 return: ; preds = %cond_next18
3535 br i1 %toBool, label %cond_true, label %cond_false
3636
3737 cond_true: ; preds = %entry
38 %tmp3 = call i32 (...)* @bar( ) ; [#uses=0]
39 %tmp4 = call i32 (...)* @baz( i32 5, i32 6 ) ; [#uses=0]
38 %tmp3 = call i32 (...) @bar( ) ; [#uses=0]
39 %tmp4 = call i32 (...) @baz( i32 5, i32 6 ) ; [#uses=0]
4040 %tmp7 = load i32, i32* %q_addr ; [#uses=1]
4141 %tmp8 = icmp ne i32 %tmp7, 0 ; [#uses=1]
4242 %tmp89 = zext i1 %tmp8 to i8 ; [#uses=1]
4444 br i1 %toBool10, label %cond_true11, label %cond_false15
4545
4646 cond_false: ; preds = %entry
47 %tmp5 = call i32 (...)* @foo( ) ; [#uses=0]
48 %tmp6 = call i32 (...)* @baz( i32 5, i32 6 ) ; [#uses=0]
47 %tmp5 = call i32 (...) @foo( ) ; [#uses=0]
48 %tmp6 = call i32 (...) @baz( i32 5, i32 6 ) ; [#uses=0]
4949 %tmp27 = load i32, i32* %q_addr ; [#uses=1]
5050 %tmp28 = icmp ne i32 %tmp27, 0 ; [#uses=1]
5151 %tmp289 = zext i1 %tmp28 to i8 ; [#uses=1]
5353 br i1 %toBool210, label %cond_true11, label %cond_false15
5454
5555 cond_true11: ; preds = %cond_next
56 %tmp13 = call i32 (...)* @foo( ) ; [#uses=0]
57 %tmp14 = call i32 (...)* @quux( i32 3, i32 4 ) ; [#uses=0]
56 %tmp13 = call i32 (...) @foo( ) ; [#uses=0]
57 %tmp14 = call i32 (...) @quux( i32 3, i32 4 ) ; [#uses=0]
5858 br label %cond_next18
5959
6060 cond_false15: ; preds = %cond_next
61 %tmp16 = call i32 (...)* @bar( ) ; [#uses=0]
62 %tmp17 = call i32 (...)* @quux( i32 3, i32 4 ) ; [#uses=0]
61 %tmp16 = call i32 (...) @bar( ) ; [#uses=0]
62 %tmp17 = call i32 (...) @quux( i32 3, i32 4 ) ; [#uses=0]
6363 br label %cond_next18
6464
6565 cond_next18: ; preds = %cond_false15, %cond_true11
66 %tmp19 = call i32 (...)* @bar( ) ; [#uses=0]
66 %tmp19 = call i32 (...) @bar( ) ; [#uses=0]
6767 br label %return
6868
6969 return: ; preds = %cond_next18
1212 mandel.exit: ; preds = %bb88.i
1313 %tmp2 = load volatile double, double* getelementptr ({ double, double }, { double, double }* @accum, i32 0, i32 0), align 8 ; [#uses=1]
1414 %tmp23 = fptosi double %tmp2 to i32 ; [#uses=1]
15 %tmp5 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i32 %tmp23 ) ; [#uses=0]
15 %tmp5 = tail call i32 (i8*, ...) @printf( i8* getelementptr ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i32 %tmp23 ) ; [#uses=0]
1616 ret i32 0
1717 }
1818
7272 br label %bb620.i.i
7373 bb620.i.i: ; preds = %bb620.i.i, %bb609.i.i
7474 %indvar166.i465.i = phi i32 [ %indvar.next167.i.i, %bb620.i.i ], [ 0, %bb609.i.i ] ; [#uses=1]
75 %tmp640.i.i = call i32 (%struct.FILE*, i8*, ...)* @fscanf( %struct.FILE* %tmp61, i8* getelementptr ([5 x i8], [5 x i8]* @.str584, i32 0, i32 0), [1024 x i8]* null ) ; [#uses=0]
75 %tmp640.i.i = call i32 (%struct.FILE*, i8*, ...) @fscanf( %struct.FILE* %tmp61, i8* getelementptr ([5 x i8], [5 x i8]* @.str584, i32 0, i32 0), [1024 x i8]* null ) ; [#uses=0]
7676 %tmp648.i.i = load i32, i32* null, align 4 ; [#uses=1]
7777 %tmp650.i468.i = icmp sgt i32 0, %tmp648.i.i ; [#uses=1]
78 %tmp624.i469.i = call i32 (%struct.FILE*, i8*, ...)* @fscanf( %struct.FILE* %tmp61, i8* getelementptr ([5 x i8], [5 x i8]* @.str584, i32 0, i32 0), [1024 x i8]* null ) ; [#uses=0]
78 %tmp624.i469.i = call i32 (%struct.FILE*, i8*, ...) @fscanf( %struct.FILE* %tmp61, i8* getelementptr ([5 x i8], [5 x i8]* @.str584, i32 0, i32 0), [1024 x i8]* null ) ; [#uses=0]
7979 %indvar.next167.i.i = add i32 %indvar166.i465.i, 1 ; [#uses=1]
8080 br i1 %tmp650.i468.i, label %bb653.i.i.loopexit, label %bb620.i.i
8181 bb653.i.i.loopexit: ; preds = %bb620.i.i
8080 br i1 %0, label %bb435, label %bb433
8181
8282 bb394: ; preds = %bb122
83 call void (i32, i32, i8*, i32, %struct.FILE_POS*, ...)* @Error(i32 1, i32 3, i8* getelementptr ([23 x i8], [23 x i8]* @"\01LC13423", i32 0, i32 0), i32 0, %struct.FILE_POS* @no_file_pos, i8* getelementptr ([13 x i8], [13 x i8]* @"\01LC18972", i32 0, i32 0), i8* null) nounwind
83 call void (i32, i32, i8*, i32, %struct.FILE_POS*, ...) @Error(i32 1, i32 3, i8* getelementptr ([23 x i8], [23 x i8]* @"\01LC13423", i32 0, i32 0), i32 0, %struct.FILE_POS* @no_file_pos, i8* getelementptr ([13 x i8], [13 x i8]* @"\01LC18972", i32 0, i32 0), i8* null) nounwind
8484 br label %bb396
8585
8686 bb396: ; preds = %bb394, %bb131, %bb122, %bb122, %bb122, %bb122, %RESUME
33
44 define i32 @main() {
55 %rem_r = frem double 0.000000e+00, 0.000000e+00 ; [#uses=1]
6 %1 = call i32 (i8*, ...)* @printf(i8* null, double %rem_r) ; [#uses=0]
6 %1 = call i32 (i8*, ...) @printf(i8* null, double %rem_r) ; [#uses=0]
77 ret i32 0
88 }
44 define i16 @fn16(i16 %arg0.0, <2 x i16> %arg1, i16 %arg2.0) nounwind {
55 entry:
66 store <2 x i16> %arg1, <2 x i16>* null
7 %0 = call i32 (i8*, ...)* @printf(i8* getelementptr ([30 x i8], [30 x i8]* @.str, i32 0, i32 0), i32 0) nounwind ; [#uses=0]
7 %0 = call i32 (i8*, ...) @printf(i8* getelementptr ([30 x i8], [30 x i8]* @.str, i32 0, i32 0), i32 0) nounwind ; [#uses=0]
88 ret i16 0
99 }
1010
1818
1919 bb3: ; preds = %bb1, %bb
2020 %iftmp.0.0 = phi i32 [ 0, %bb1 ], [ -1, %bb ] ; [#uses=1]
21 %1 = tail call i32 (i8*, ...)* @printf(i8* getelementptr ([7 x i8], [7 x i8]* @"\01LC", i32 0, i32 0), i32 0, i32 %iftmp.0.0) nounwind ; [#uses=0]
21 %1 = tail call i32 (i8*, ...) @printf(i8* getelementptr ([7 x i8], [7 x i8]* @"\01LC", i32 0, i32 0), i32 0, i32 %iftmp.0.0) nounwind ; [#uses=0]
2222 %2 = load %struct.List*, %struct.List** null, align 4 ; <%struct.List*> [#uses=2]
2323 %phitmp = icmp eq %struct.List* %2, null ; [#uses=1]
2424 br i1 %phitmp, label %bb5, label %bb
5656 br i1 undef, label %bb5.i, label %bb1.outer2.i.i.outer
5757
5858 bb5.i: ; preds = %Fft.exit.i
59 %0 = tail call i32 (i8*, ...)* @printf(i8* getelementptr ([15 x i8], [15 x i8]* @"\01LC", i32 0, i32 0), double undef, double undef) nounwind ; [#uses=0]
59 %0 = tail call i32 (i8*, ...) @printf(i8* getelementptr ([15 x i8], [15 x i8]* @"\01LC", i32 0, i32 0), double undef, double undef) nounwind ; [#uses=0]
6060 unreachable
6161 }
4646 tail call void @diff(i8* undef, i8* %3, i32 undef, i32 undef, i32 undef, i32 undef) nounwind
4747 %4 = sitofp i32 undef to double ; [#uses=1]
4848 %5 = fdiv double %4, 1.000000e+01 ; [#uses=1]
49 %6 = tail call i32 (i8*, ...)* @printf(i8* getelementptr ([29 x i8], [29 x i8]* @"\01LC12", i32 0, i32 0), double %5) nounwind ; [#uses=0]
49 %6 = tail call i32 (i8*, ...) @printf(i8* getelementptr ([29 x i8], [29 x i8]* @"\01LC12", i32 0, i32 0), double %5) nounwind ; [#uses=0]
5050 %7 = load i32, i32* @al_len, align 4 ; [#uses=1]
5151 %8 = load i32, i32* @no_mat, align 4 ; [#uses=1]
5252 %9 = load i32, i32* @no_mis, align 4 ; [#uses=1]
5353 %10 = sub i32 %7, %8 ; [#uses=1]
5454 %11 = sub i32 %10, %9 ; [#uses=1]
55 %12 = tail call i32 (i8*, ...)* @printf(i8* getelementptr ([33 x i8], [33 x i8]* @"\01LC16", i32 0, i32 0), i32 %11) nounwind ; [#uses=0]
56 %13 = tail call i32 (i8*, ...)* @printf(i8* getelementptr ([47 x i8], [47 x i8]* @"\01LC17", i32 0, i32 0), i32 undef, i32 %1, i32 undef, i32 undef) nounwind ; [#uses=0]
55 %12 = tail call i32 (i8*, ...) @printf(i8* getelementptr ([33 x i8], [33 x i8]* @"\01LC16", i32 0, i32 0), i32 %11) nounwind ; [#uses=0]
56 %13 = tail call i32 (i8*, ...) @printf(i8* getelementptr ([47 x i8], [47 x i8]* @"\01LC17", i32 0, i32 0), i32 undef, i32 %1, i32 undef, i32 undef) nounwind ; [#uses=0]
5757 br i1 undef, label %bb15, label %bb12
5858
5959 bb12: ; preds = %bb11
4141 store i32 0, i32* @no_mis, align 4
4242 %4 = getelementptr i8, i8* %B, i32 %0 ; [#uses=1]
4343 tail call void @diff(i8* undef, i8* %4, i32 undef, i32 %3, i32 undef, i32 undef) nounwind
44 %5 = tail call i32 (i8*, ...)* @printf(i8* getelementptr ([33 x i8], [33 x i8]* @"\01LC11", i32 0, i32 0), i32 %tmp13) nounwind ; [#uses=0]
44 %5 = tail call i32 (i8*, ...) @printf(i8* getelementptr ([33 x i8], [33 x i8]* @"\01LC11", i32 0, i32 0), i32 %tmp13) nounwind ; [#uses=0]
4545 %6 = load i32, i32* @no_mis, align 4 ; [#uses=1]
46 %7 = tail call i32 (i8*, ...)* @printf(i8* getelementptr ([33 x i8], [33 x i8]* @"\01LC15", i32 0, i32 0), i32 %6) nounwind ; [#uses=0]
47 %8 = tail call i32 (i8*, ...)* @printf(i8* getelementptr ([47 x i8], [47 x i8]* @"\01LC17", i32 0, i32 0), i32 undef, i32 %1, i32 undef, i32 %2) nounwind ; [#uses=0]
46 %7 = tail call i32 (i8*, ...) @printf(i8* getelementptr ([33 x i8], [33 x i8]* @"\01LC15", i32 0, i32 0), i32 %6) nounwind ; [#uses=0]
47 %8 = tail call i32 (i8*, ...) @printf(i8* getelementptr ([47 x i8], [47 x i8]* @"\01LC17", i32 0, i32 0), i32 undef, i32 %1, i32 undef, i32 %2) nounwind ; [#uses=0]
4848 br i1 undef, label %bb15, label %bb12
4949
5050 bb12: ; preds = %bb11
77 ;CHECK: [sp, #8]
88 ;CHECK: [sp, #12]
99 ;CHECK: [sp]
10 tail call void (i8*, ...)* @f(i8* getelementptr ([1 x i8], [1 x i8]* @.str, i32 0, i32 0), i32 1, double 2.000000e+00, i32 3, double 4.000000e+00)
10 tail call void (i8*, ...) @f(i8* getelementptr ([1 x i8], [1 x i8]* @.str, i32 0, i32 0), i32 1, double 2.000000e+00, i32 3, double 4.000000e+00)
1111 ret void
1212 }
1313
1818 %tmp21 = load i32, i32* undef ; [#uses=1]
1919 %0 = mul i32 1, %tmp21 ; [#uses=1]
2020 %vla22 = alloca i8, i32 %0, align 1 ; [#uses=1]
21 call void (...)* @zz(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i32 0, i32 0), i32 2, i32 1)
21 call void (...) @zz(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i32 0, i32 0), i32 2, i32 1)
2222 br i1 undef, label %if.then, label %if.end36
2323
2424 if.then: ; preds = %entry
25 %call = call i32 (...)* @x(%struct.q* undef, i8* undef, i8* %vla6, i8* %vla10, i32 undef) ; [#uses=0]
26 %call35 = call i32 (...)* @x(%struct.q* undef, i8* %vla14, i8* %vla18, i8* %vla22, i32 undef) ; [#uses=0]
25 %call = call i32 (...) @x(%struct.q* undef, i8* undef, i8* %vla6, i8* %vla10, i32 undef) ; [#uses=0]
26 %call35 = call i32 (...) @x(%struct.q* undef, i8* %vla14, i8* %vla18, i8* %vla22, i32 undef) ; [#uses=0]
2727 unreachable
2828
2929 if.end36: ; preds = %entry
1212 define void @TW_oldinput(%struct.FILE* nocapture %fp) nounwind {
1313 entry:
1414 %xcenter = alloca i32, align 4 ; [#uses=2]
15 %0 = call i32 (%struct.FILE*, i8*, ...)* @fscanf(%struct.FILE* %fp, i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str2708, i32 0, i32 0), i32* undef, i32* undef, i32* %xcenter, i32* null) nounwind ; [#uses=1]
15 %0 = call i32 (%struct.FILE*, i8*, ...) @fscanf(%struct.FILE* %fp, i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str2708, i32 0, i32 0), i32* undef, i32* undef, i32* %xcenter, i32* null) nounwind ; [#uses=1]
1616 %1 = icmp eq i32 %0, 4 ; [#uses=1]
1717 br i1 %1, label %bb, label %return
1818
136136 br i1 undef, label %bb248, label %bb445
137137
138138 bb445: ; preds = %bb322, %bb10, %bb
139 %49 = call i32 (%struct.FILE*, i8*, ...)* @fscanf(%struct.FILE* %fp, i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str2708, i32 0, i32 0), i32* undef, i32* undef, i32* %xcenter, i32* null) nounwind ; [#uses=1]
139 %49 = call i32 (%struct.FILE*, i8*, ...) @fscanf(%struct.FILE* %fp, i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str2708, i32 0, i32 0), i32* undef, i32* undef, i32* %xcenter, i32* null) nounwind ; [#uses=1]
140140 %50 = icmp eq i32 %49, 4 ; [#uses=1]
141141 br i1 %50, label %bb, label %return
142142
3030 entry:
3131 %tmp.i = getelementptr inbounds %struct.A, %struct.A* %this, i32 0, i32 0 ; [#uses=1]
3232 %tmp2.i = load i32, i32* %tmp.i ; [#uses=1]
33 %call.i = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str4, i32 0, i32 0), i32 %tmp2.i) nounwind ; [#uses=0]
33 %call.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str4, i32 0, i32 0), i32 %tmp2.i) nounwind ; [#uses=0]
3434 %tmp3.i = load i32, i32* @d ; [#uses=1]
3535 %inc.i = add nsw i32 %tmp3.i, 1 ; [#uses=1]
3636 store i32 %inc.i, i32* @d
4545 %exception.i = tail call i8* @__cxa_allocate_exception(i32 4) nounwind ; [#uses=2]
4646 %tmp2.i.i.i = bitcast i8* %exception.i to i32* ; [#uses=1]
4747 store i32 1, i32* %tmp2.i.i.i
48 %call.i.i.i = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str5, i32 0, i32 0), i32 1) nounwind ; [#uses=0]
48 %call.i.i.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str5, i32 0, i32 0), i32 1) nounwind ; [#uses=0]
4949 invoke void @__cxa_throw(i8* %exception.i, i8* bitcast (%0* @_ZTI1A to i8*), i8* bitcast (void (%struct.A*)* @_ZN1AD1Ev to i8*)) noreturn
5050 to label %.noexc unwind label %lpad
5151
5454
5555 try.cont: ; preds = %lpad
5656 %0 = tail call i8* @__cxa_get_exception_ptr(i8* %exn) nounwind ; [#uses=0]
57 %call.i.i = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str3, i32 0, i32 0), i32 2) nounwind ; [#uses=0]
57 %call.i.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str3, i32 0, i32 0), i32 2) nounwind ; [#uses=0]
5858 %1 = tail call i8* @__cxa_begin_catch(i8* %exn) nounwind ; [#uses=0]
5959 %puts = tail call i32 @puts(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @str1, i32 0, i32 0)) ; [#uses=0]
60 %call.i.i3 = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str4, i32 0, i32 0), i32 2) nounwind ; [#uses=0]
60 %call.i.i3 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str4, i32 0, i32 0), i32 2) nounwind ; [#uses=0]
6161 %tmp3.i.i = load i32, i32* @d ; [#uses=1]
6262 %inc.i.i4 = add nsw i32 %tmp3.i.i, 1 ; [#uses=1]
6363 store i32 %inc.i.i4, i32* @d
6464 tail call void @__cxa_end_catch()
6565 %tmp13 = load i32, i32* @d ; [#uses=1]
66 %call14 = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str2, i32 0, i32 0), i32 2, i32 %tmp13) ; [#uses=0]
66 %call14 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str2, i32 0, i32 0), i32 2, i32 %tmp13) ; [#uses=0]
6767 %tmp16 = load i32, i32* @d ; [#uses=1]
6868 %cmp = icmp ne i32 %tmp16, 2 ; [#uses=1]
6969 %conv = zext i1 %cmp to i32 ; [#uses=1]
1111 br i1 %cmp, label %if.then, label %if.end
1212
1313 if.then: ; preds = %entry
14 tail call void (...)* @g(i32 %a, i32 %b) nounwind
14 tail call void (...) @g(i32 %a, i32 %b) nounwind
1515 br label %if.end
1616
1717 if.end: ; preds = %if.then, %entry
1111 br i1 %cmp, label %if.then, label %if.end
1212
1313 if.then: ; preds = %entry
14 tail call void (...)* @h(i32 %a, i32 %b) nounwind
14 tail call void (...) @h(i32 %a, i32 %b) nounwind
1515 br label %if.end
1616
1717 if.end: ; preds = %if.then, %entry
3030 br i1 %cmp, label %if.then, label %if.end
3131
3232 if.then: ; preds = %entry
33 tail call void (...)* @h(i32 %a, i32 %b) nounwind
33 tail call void (...) @h(i32 %a, i32 %b) nounwind
3434 br label %if.end
3535
3636 if.end: ; preds = %if.then, %entry
33
44 define void @sample_test(i8* %.T0348, i16* nocapture %sourceA, i16* nocapture %destValues) {
55 L.entry:
6 %0 = call i32 (...)* @get_index(i8* %.T0348, i32 0)
6 %0 = call i32 (...) @get_index(i8* %.T0348, i32 0)
77 %1 = bitcast i16* %destValues to i8*
88 %2 = mul i32 %0, 6
99 %3 = getelementptr i8, i8* %1, i32 %2
3232 ; CHECK: movw r0, #555
3333 define i32 @main() {
3434 entry:
35 call void (i32, ...)* @test_byval_8_bytes_alignment(i32 555, %struct_t* byval @static_val)
35 call void (i32, ...) @test_byval_8_bytes_alignment(i32 555, %struct_t* byval @static_val)
3636 ret i32 0
3737 }
3838
4747 entry:
4848 %a = getelementptr inbounds %struct_t, %struct_t* %val, i32 0, i32 0
4949 %0 = load double, double* %a
50 call void (double)* @f(double %0)
50 call void (double) @f(double %0)
5151 ret void
5252 }
5353
5959 ; CHECK: movw r0, #555
6060 define i32 @main_fixed_arg() {
6161 entry:
62 call void (i32, %struct_t*)* @test_byval_8_bytes_alignment_fixed_arg(i32 555, %struct_t* byval @static_val)
62 call void (i32, %struct_t*) @test_byval_8_bytes_alignment_fixed_arg(i32 555, %struct_t* byval @static_val)
6363 ret i32 0
6464 }
1313 entry:
1414 %a = getelementptr inbounds %struct_t, %struct_t* %val, i32 0, i32 0
1515 %0 = load double, double* %a
16 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i32 0, i32 0), double %0)
16 %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i32 0, i32 0), double %0)
1717 ret void
1818 }
1313 entry:
1414 %conv = sext i16 %b to i32
1515 %conv1 = sext i8 %E to i32
16 %call = tail call i32 (i8*, ...)* @printf(
16 %call = tail call i32 (i8*, ...) @printf(
1717 i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i32 0, i32 0), ; --> R0
1818 i32 %a, ; --> R1
1919 i32 %conv, ; --> R2
3737 %tmp0 = load i32, i32* @bar_i
3838 %tmp2 = call i32 @foo_f()
3939 %tmp3 = add i32 %tmp, %tmp2
40 %tmp4 = call %FunTy* @bar_f()
40 %tmp4 = call i32 @bar_f()
4141 %tmp5 = add i32 %tmp3, %tmp4
4242 %tmp6 = add i32 %tmp1, %tmp5
4343 %tmp7 = add i32 %tmp6, %tmp0
1717 ; DARWIN-LABEL: f2:
1818 ; DARWIN: mov r3, #128
1919 entry:
20 %0 = tail call i32 (i32, ...)* @g2(i32 5, double 1.600000e+01, i32 128) nounwind optsize ; [#uses=1]
20 %0 = tail call i32 (i32, ...) @g2(i32 5, double 1.600000e+01, i32 128) nounwind optsize ; [#uses=1]
2121 %not. = icmp ne i32 %0, 128 ; [#uses=1]
2222 %.0 = zext i1 %not. to i32 ; [#uses=1]
2323 ret i32 %.0
11
22 define void @frame_dummy() {
33 entry:
4 %tmp1 = tail call void (i8*)* (void (i8*)*)* asm "", "=r,0,~{dirflag},~{fpsr},~{flags}"( void (i8*)* null ) ; [#uses=0]
4 %tmp1 = tail call void (i8*)* (void (i8*)*) asm "", "=r,0,~{dirflag},~{fpsr},~{flags}"( void (i8*)* null ) ; [#uses=0]
55 ret void
66 }
1313 bb1: ; preds = %bb, %entry
1414 %indvar = phi i32 [ 0, %entry ], [ %indvar.next, %bb ] ; [#uses=3]
1515 %i.0 = bitcast i32 %indvar to i32 ; [#uses=2]
16 %tmp = tail call i32 (...)* @bar( ) ; [#uses=1]
16 %tmp = tail call i32 (...) @bar( ) ; [#uses=1]
1717 %tmp2 = add i32 %i.0, %tmp ; [#uses=1]
1818 %Ptr_addr.0 = sub i32 %Ptr, %tmp2 ; [#uses=0]
1919 %tmp12 = icmp eq i32 %i.0, %Ptr ; [#uses=1]
99 entry:
1010 %retval = alloca i32, align 4
1111 store i32 0, i32* %retval
12 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([32 x i8], [32 x i8]* @buffer, i32 0, i32 0))
12 %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([32 x i8], [32 x i8]* @buffer, i32 0, i32 0))
1313 %call1 = call i8* @strcpy(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @buffer, i32 0, i32 0), i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str1, i32 0, i32 0)) #3
1414 call void @llvm.clear_cache(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @buffer, i32 0, i32 0), i8* getelementptr inbounds (i8, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @buffer, i32 0, i32 0), i32 32)) #3
15 %call2 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([32 x i8], [32 x i8]* @buffer, i32 0, i32 0))
15 %call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([32 x i8], [32 x i8]* @buffer, i32 0, i32 0))
1616 ret i32 0
1717 }
1818
88 br i1 %tmp.upgrd.1, label %cond_true, label %UnifiedReturnBlock
99
1010 cond_true: ; preds = %entry
11 %tmp.upgrd.2 = tail call i32 (...)* @bar( ) ; [#uses=0]
11 %tmp.upgrd.2 = tail call i32 (...) @bar( ) ; [#uses=0]
1212 ret void
1313
1414 UnifiedReturnBlock: ; preds = %entry
2727 for.end54: ; preds = %for.body9
2828 %tmp115 = extractelement <4 x float> %add19, i32 1
2929 %conv6.i75 = fpext float %tmp115 to double, !dbg !45
30 %call.i82 = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i32 0, i32 0), double undef, double %conv6.i75, double undef, double undef) nounwind, !dbg !45
30 %call.i82 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i32 0, i32 0), double undef, double %conv6.i75, double undef, double undef) nounwind, !dbg !45
3131 %tmp116 = extractelement <4 x float> %add20, i32 1
3232 %conv6.i76 = fpext float %tmp116 to double, !dbg !45
33 %call.i83 = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i32 0, i32 0), double undef, double %conv6.i76, double undef, double undef) nounwind, !dbg !45
33 %call.i83 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i32 0, i32 0), double undef, double %conv6.i76, double undef, double undef) nounwind, !dbg !45
3434 ret i32 0, !dbg !49
3535 }
3636
1515 tail call void @llvm.dbg.value(metadata double %val, i64 0, metadata !20, metadata !MDExpression()), !dbg !26
1616 tail call void @llvm.dbg.value(metadata i8 %c, i64 0, metadata !21, metadata !MDExpression()), !dbg !26
1717 %0 = zext i8 %c to i32, !dbg !27
18 %1 = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i8* %ptr, double %val, i32 %0) nounwind, !dbg !27
18 %1 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i8* %ptr, double %val, i32 %0) nounwind, !dbg !27
1919 ret i32 0, !dbg !29
2020 }
2121
2525 tail call void @llvm.dbg.value(metadata double %val, i64 0, metadata !17, metadata !MDExpression()), !dbg !30
2626 tail call void @llvm.dbg.value(metadata i8 %c, i64 0, metadata !18, metadata !MDExpression()), !dbg !30
2727 %0 = zext i8 %c to i32, !dbg !31
28 %1 = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i8* %ptr, double %val, i32 %0) nounwind, !dbg !31
28 %1 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i8* %ptr, double %val, i32 %0) nounwind, !dbg !31
2929 ret i32 0, !dbg !33
3030 }
3131
4848 tail call void @llvm.dbg.value(metadata double %1, i64 0, metadata !50, metadata !MDExpression()) nounwind, !dbg !38
4949 tail call void @llvm.dbg.value(metadata i8 %5, i64 0, metadata !51, metadata !MDExpression()) nounwind, !dbg !38
5050 %6 = zext i8 %5 to i32, !dbg !39
51 %7 = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i8* %3, double %1, i32 %6) nounwind, !dbg !39
51 %7 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i8* %3, double %1, i32 %6) nounwind, !dbg !39
5252 %8 = tail call i32 @printer(i8* %3, double %1, i8 zeroext %5) nounwind, !dbg !40
5353 ret i32 0, !dbg !41
5454 }
2626 tail call void @llvm.dbg.value(metadata <4 x float> %add19, i64 0, metadata !27, metadata !MDExpression()), !dbg !39
2727 %tmp115 = extractelement <4 x float> %add19, i32 1
2828 %conv6.i75 = fpext float %tmp115 to double, !dbg !45
29 %call.i82 = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i32 0, i32 0), double undef, double %conv6.i75, double undef, double undef) nounwind, !dbg !45
29 %call.i82 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i32 0, i32 0), double undef, double %conv6.i75, double undef, double undef) nounwind, !dbg !45
3030 ret i32 0, !dbg !49
3131 }
3232
1818 tail call void @llvm.dbg.value(metadata i8 %c, i64 0, metadata !12, metadata !MDExpression()), !dbg !26
1919 %conv = fpext float %val to double, !dbg !27
2020 %conv3 = zext i8 %c to i32, !dbg !27
21 %call = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i8* %ptr, double %conv, i32 %conv3) nounwind optsize, !dbg !27
21 %call = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i8* %ptr, double %conv, i32 %conv3) nounwind optsize, !dbg !27
2222 ret i32 0, !dbg !29
2323 }
2424
3131 tail call void @llvm.dbg.value(metadata i8 %c, i64 0, metadata !16, metadata !MDExpression()), !dbg !32
3232 %conv = fpext float %val to double, !dbg !33
3333 %conv3 = zext i8 %c to i32, !dbg !33
34 %call = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i8* %ptr, double %conv, i32 %conv3) nounwind optsize, !dbg !33
34 %call = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i8* %ptr, double %conv, i32 %conv3) nounwind optsize, !dbg !33
3535 ret i32 0, !dbg !35
3636 }
3737
5252 tail call void @llvm.dbg.value(metadata i8 %conv6, i64 0, metadata !62, metadata !MDExpression()) nounwind, !dbg !43
5353 %conv.i = fpext float %conv1 to double, !dbg !44
5454 %conv3.i = and i32 %add5, 255, !dbg !44
55 %call.i = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i8* %add.ptr, double %conv.i, i32 %conv3.i) nounwind optsize, !dbg !44
55 %call.i = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i8* %add.ptr, double %conv.i, i32 %conv3.i) nounwind optsize, !dbg !44
5656 %call14 = tail call i32 @printer(i8* %add.ptr, float %conv1, i8 zeroext %conv6) optsize, !dbg !45
5757 ret i32 0, !dbg !46
5858 }
3636 ; THUMB: str.w {{[a-z0-9]+}}, [sp]
3737 ; THUMB: str.w {{[a-z0-9]+}}, [sp, #4]
3838 ; THUMB: bl {{_?}}CallVariadic
39 %call = call i32 (i32, ...)* @CallVariadic(i32 5, i32 %0, i32 %1, i32 %2, i32 %3, i32 %4)
39 %call = call i32 (i32, ...) @CallVariadic(i32 5, i32 %0, i32 %1, i32 %2, i32 %3, i32 %4)
4040 store i32 %call, i32* %tmp, align 4
4141 %5 = load i32, i32* %tmp, align 4
4242 ret i32 %5
4747 ; SOFT: vmov.i32 [[REG6:(d[0-9]+)]], #0x80000000
4848 ; SOFT: vshr.u64 [[REG7]], [[REG7]], #32
4949 ; SOFT: vbsl [[REG6]], [[REG7]],
50 %0 = tail call double (...)* @bar() nounwind
50 %0 = tail call double (...) @bar() nounwind
5151 %1 = fptrunc double %0 to float
5252 %2 = tail call float @copysignf(float 5.000000e-01, float %1) nounwind readnone
5353 %3 = fadd float %1, %2
1515 ; CHECK-LABEL: test_indirect_tail:
1616 ; CHECK: bx {{r[0-9]+}}
1717 %func = load void()*, void()** @ind_func
18 tail call ghccc void()* %func()
18 tail call ghccc void() %func()
1919 ret void
2020 }
99 br i1 %tmp7, label %cond_true, label %UnifiedReturnBlock
1010
1111 cond_true: ; preds = %entry
12 %tmp10 = call i32 (...)* @bar( ) ; [#uses=0]
12 %tmp10 = call i32 (...) @bar( ) ; [#uses=0]
1313 ret void
1414
1515 UnifiedReturnBlock: ; preds = %entry
2626 %9 = load i32, i32* %8
2727 %10 = add i32 %9, ptrtoint (i8* blockaddress(@func, %4) to i32)
2828 %11 = inttoptr i32 %10 to i8*
29 %12 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @0, i32 0, i32 0))
29 %12 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @0, i32 0, i32 0))
3030 indirectbr i8* %11, [label %13, label %14]
3131
3232 ;
6363 ; CHECK-DARWINA15: vmul.f32 s{{[0-9]*}}
6464 ; CHECK-DARWINSWIFT: vmul.f32 d{{[0-9]*}}
6565 %conv = fpext float %mul to double
66 %call = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i32 0, i32 0), double %conv) #1
66 %call = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i32 0, i32 0), double %conv) #1
6767 %inc = add nsw i32 %i.04, 1
6868 %exitcond = icmp eq i32 %inc, 16000
6969 br i1 %exitcond, label %for.end, label %for.body
1616 %or = or i32 %cond13, %bf.clear10
1717 %shl = shl nuw i32 %or, 2
1818 %add = add i32 0, %shl
19 tail call void (i8*, i32, i32, i8*, ...)* @__sprintf_chk(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @operands, i32 0, i32 0), i32 0, i32 50, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str86, i32 0, i32 0), i32 undef, i32 undef, i32 %add)
19 tail call void (i8*, i32, i32, i8*, ...) @__sprintf_chk(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @operands, i32 0, i32 0), i32 0, i32 50, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str86, i32 0, i32 0), i32 undef, i32 undef, i32 %add)
2020 ret void
2121 }
2222
6363 ; A9-NOT: ldr [[REG:r[0-9]+]], [r0, r1, lsl #2]!
6464 ; A9: str [[REG]], [r0, r1, lsl #2]
6565 ; A9-NOT: str [[REG]], [r0]
66 %0 = tail call i8* (...)* @malloc(i32 undef) nounwind
66 %0 = tail call i8* (...) @malloc(i32 undef) nounwind
6767 %1 = bitcast i8* %0 to i32*
6868 %2 = sext i16 %addr to i32
6969 %3 = getelementptr inbounds i32, i32* %1, i32 %2
1515 %title = alloca [15 x i8], align 1
1616 %0 = getelementptr inbounds [15 x i8], [15 x i8]* %title, i32 0, i32 0
1717 call void @llvm.memcpy.p0i8.p0i8.i32(i8* %0, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @main.title, i32 0, i32 0), i32 15, i32 1, i1 false)
18 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i8* %0) #3
18 %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i8* %0) #3
1919 ret i32 0
2020 }
2121
99 ; CHECK: main
1010 ; CHECK: push
1111 ; CHECK: stm
12 %0 = tail call i32 (i8*, ...)* @printf(i8* getelementptr ([26 x i8], [26 x i8]* @"\01LC1", i32 0, i32 0), i32 -2, i32 -3, i32 2, i32 -6) nounwind ; [#uses=0]
13 %1 = tail call i32 (i8*, ...)* @printf(i8* getelementptr ([32 x i8], [32 x i8]* @"\01LC", i32 0, i32 0), i32 0, i32 1, i32 0, i32 1, i32 0, i32 1) nounwind ; [#uses=0]
12 %0 = tail call i32 (i8*, ...) @printf(i8* getelementptr ([26 x i8], [26 x i8]* @"\01LC1", i32 0, i32 0), i32 -2, i32 -3, i32 2, i32 -6) nounwind ; [#uses=0]
13 %1 = tail call i32 (i8*, ...) @printf(i8* getelementptr ([32 x i8], [32 x i8]* @"\01LC", i32 0, i32 0), i32 0, i32 1, i32 0, i32 1, i32 0, i32 1) nounwind ; [#uses=0]
1414 ret i32 0
1515 }
99 %0 = load i64, i64* null, align 4 ; [#uses=1]
1010 %1 = uitofp i64 %0 to double ; [#uses=1]
1111 %2 = fdiv double 0.000000e+00, %1 ; [#uses=1]
12 %3 = call i32 (%struct.FILE*, i8*, ...)* @fprintf(%struct.FILE* null, i8* getelementptr ([54 x i8], [54 x i8]* @"\01LC10", i32 0, i32 0), i64 0, double %2) ; [#uses=0]
12 %3 = call i32 (%struct.FILE*, i8*, ...) @fprintf(%struct.FILE* null, i8* getelementptr ([54 x i8], [54 x i8]* @"\01LC10", i32 0, i32 0), i64 0, double %2) ; [#uses=0]
1313 ret void
1414 }
1515
33
44 define i32 @main() {
55 entry:
6 %tmp = call i32 (i8*, ...)* @printf( i8* getelementptr ([43 x i8], [43 x i8]* @str, i32 0, i64 0), i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10 ) ; [#uses=0]
7 %tmp2 = call i32 (i8*, ...)* @printf( i8* getelementptr ([43 x i8], [43 x i8]* @str, i32 0, i64 0), i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1 ) ; [#uses=0]
6 %tmp = call i32 (i8*, ...) @printf( i8* getelementptr ([43 x i8], [43 x i8]* @str, i32 0, i64 0), i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10 ) ; [#uses=0]
7 %tmp2 = call i32 (i8*, ...) @printf( i8* getelementptr ([43 x i8], [43 x i8]* @str, i32 0, i64 0), i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1 ) ; [#uses=0]
88 ret i32 11
99 }
1010
2424 %8 = shufflevector <8 x i64> %1, <8 x i64> %3, <8 x i32>
2525 %9 = shufflevector <8 x i64> %1, <8 x i64> %3, <8 x i32>
2626
27 tail call void(<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>)* @foo(<8 x i64> %1, <8 x i64> %3, <8 x i64> %5, <8 x i64> %7, <8 x i64> %8, <8 x i64> %9)
27 tail call void(<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>) @foo(<8 x i64> %1, <8 x i64> %3, <8 x i64> %5, <8 x i64> %7, <8 x i64> %8, <8 x i64> %9)
2828 ret void
2929 }
3030
123123 br i1 %tmp6, label %cond_true, label %cond_false
124124
125125 cond_true: ; preds = %entry
126 %tmp.upgrd.2 = tail call i32 (...)* @bar( ) ; [#uses=0]
126 %tmp.upgrd.2 = tail call i32 (...) @bar( ) ; [#uses=0]
127127 ret void
128128
129129 cond_false: ; preds = %entry
130 %tmp7 = tail call i32 (...)* @baz( ) ; [#uses=0]
130 %tmp7 = tail call i32 (...) @baz( ) ; [#uses=0]
131131 ret void
132132 }
133133
146146 br i1 %tmp.upgrd.3, label %cond_true, label %cond_false
147147
148148 cond_true: ; preds = %entry
149 %tmp.upgrd.4 = tail call i32 (...)* @bar( ) ; [#uses=0]
149 %tmp.upgrd.4 = tail call i32 (...) @bar( ) ; [#uses=0]
150150 ret void
151151
152152 cond_false: ; preds = %entry
153 %tmp1 = tail call i32 (...)* @baz( ) ; [#uses=0]
153 %tmp1 = tail call i32 (...) @baz( ) ; [#uses=0]
154154 ret void
155155 }
77 br i1 %tmp5, label %UnifiedReturnBlock, label %cond_true8
88
99 cond_true8: ; preds = %entry
10 %tmp10 = tail call i32 (...)* %t.0( ) ; [#uses=1]
10 %tmp10 = tail call i32 (...) %t.0( ) ; [#uses=1]
1111 ret i32 %tmp10
1212
1313 UnifiedReturnBlock: ; preds = %entry
2525 ;
2626 %11 = getelementptr inbounds [15 x i8], [15 x i8]* %fmt, i64 0, i64 0
2727 call void @llvm.memcpy.p0i8.p0i8.i64(i8* %11, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @bpf_prog1.fmt, i64 0, i64 0), i64 15, i32 1, i1 false)
28 %12 = call i32 (i8*, i32, ...)* inttoptr (i64 11 to i32 (i8*, i32, ...)*)(i8* %11, i32 15, %struct.sk_buff* %4, i8* %7) #1
28 %12 = call i32 (i8*, i32, ...) inttoptr (i64 11 to i32 (i8*, i32, ...)*)(i8* %11, i32 15, %struct.sk_buff* %4, i8* %7) #1
2929 ; CHECK-LABEL: bpf_prog1:
3030 ; CHECK: call 4
3131 ; CHECK: call 9
105105 call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @foo_printf.fmt, i64 0, i64 0), i64 9, i32 1, i1 false)
106106 ; CHECK-LABEL: foo_printf:
107107 ; CHECK: ld_64 r1, 729618802566522216
108 %2 = call i32 (i8*, ...)* @printf(i8* %1) #3
108 %2 = call i32 (i8*, ...) @printf(i8* %1) #3
109109 ret void
110110 }
111111
22 define x86_fp80 @some_func() nounwind {
33 entry:
44 %retval = alloca x86_fp80 ; [#uses=2]
5 %call = call i32 (...)* @other_func() ; [#uses=1]
5 %call = call i32 (...) @other_func() ; [#uses=1]
66 %conv = sitofp i32 %call to x86_fp80 ; [#uses=1]
77 store x86_fp80 %conv, x86_fp80* %retval
88 %0 = load x86_fp80, x86_fp80* %retval ; [#uses=1]
3030 br i1 %tmp.8, label %then, label %else
3131
3232 then: ; preds = %entry
33 %tmp.11 = call i32 (i8*, ...)* @printf( i8* getelementptr ([6 x i8], [6 x i8]* @.str_1, i64 0, i64 0) ) ; [#uses=0]
33 %tmp.11 = call i32 (i8*, ...) @printf( i8* getelementptr ([6 x i8], [6 x i8]* @.str_1, i64 0, i64 0) ) ; [#uses=0]
3434 br label %UnifiedExitNode
3535
3636 else: ; preds = %entry
37 %tmp.13 = call i32 (i8*, ...)* @printf( i8* getelementptr ([7 x i8], [7 x i8]* @.str_2, i64 0, i64 0) ) ; [#uses=0]
37 %tmp.13 = call i32 (i8*, ...) @printf( i8* getelementptr ([7 x i8], [7 x i8]* @.str_2, i64 0, i64 0) ) ; [#uses=0]
3838 br label %UnifiedExitNode
3939
4040 UnifiedExitNode: ; preds = %else, %then
1313 %tmp.11 = call i64 @getL( ) ; [#uses=2]
1414 %tmp.5 = trunc i64 %tmp.11 to i32 ; [#uses=2]
1515 %tmp.23 = and i64 %tmp.11, -4294967296 ; [#uses=2]
16 %tmp.16 = call i32 (i8*, ...)* @printf( i8* getelementptr ([42 x i8], [42 x i8]* @.str_1, i64 0, i64 0), i32 %tmp.5, i32 %tmp.5, i64 %tmp.23, i64 %tmp.23 ) ; [#uses=0]
16 %tmp.16 = call i32 (i8*, ...) @printf( i8* getelementptr ([42 x i8], [42 x i8]* @.str_1, i64 0, i64 0), i32 %tmp.5, i32 %tmp.5, i64 %tmp.23, i64 %tmp.23 ) ; [#uses=0]
1717 ret i32 0
1818 }
1919
2727 define i32 @main() {
2828 entry:
2929 %result = call i32 @adj( i32 3, i32 2 ) ; [#uses=1]
30 %tmp.0 = call i32 (i8*, ...)* @printf( i8* getelementptr ([30 x i8], [30 x i8]* @.str_1, i64 0, i64 0), i32 3, i32 2, i32 %result ) ; [#uses=0]
30 %tmp.0 = call i32 (i8*, ...) @printf( i8* getelementptr ([30 x i8], [30 x i8]* @.str_1, i64 0, i64 0), i32 3, i32 2, i32 %result ) ; [#uses=0]
3131 ret i32 0
3232 }
3333
2727 %i = phi i64 [ 0, %entry ], [ %inc.i, %loopentry ] ; [#uses=3]
2828 %cptr = getelementptr [6 x i8], [6 x i8]* @yy_ec, i64 0, i64 %i ; [#uses=1]
2929 %c = load i8, i8* %cptr ; [#uses=1]
30 %ignore = call i32 (i8*, ...)* @printf( i8* getelementptr ([8 x i8], [8 x i8]* @.str_3, i64 0, i64 0), i64 %i ) ; [#uses=0]
31 %ignore2 = call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8], [4 x i8]* @.str_4, i64 0, i64 0), i8 %c ) ; [#uses=0]
30 %ignore = call i32 (i8*, ...) @printf( i8* getelementptr ([8 x i8], [8 x i8]* @.str_3, i64 0, i64 0), i64 %i ) ; [#uses=0]
31 %ignore2 = call i32 (i8*, ...) @printf( i8* getelementptr ([4 x i8], [4 x i8]* @.str_4, i64 0, i64 0), i8 %c ) ; [#uses=0]
3232 %inc.i = add i64 %i, 1 ; [#uses=2]
3333 %done = icmp sle i64 %inc.i, 5 ; [#uses=1]
3434 br i1 %done, label %loopentry, label %exit.1
1010 define void @printArgsNoRet(i32 %a1, float %a2, i8 %a3, double %a4, i8* %a5, i32 %a6, float %a7, i8 %a8, double %a9, i8* %a10, i32 %a11, float %a12, i8 %a13, double %a14, i8* %a15) {
1111 entry:
1212 %tmp17 = sext i8 %a13 to i32 ; [#uses=1]
13 %tmp23 = call i32 (i8*, ...)* @printf( i8* getelementptr ([29 x i8], [29 x i8]* @str2, i32 0, i64 0), i32 %a11, double 0.000000e+00, i32 %tmp17, double %a14, i32 0 ) ; [#uses=0]
13 %tmp23 = call i32 (i8*, ...) @printf( i8* getelementptr ([29 x i8], [29 x i8]* @str2, i32 0, i64 0), i32 %a11, double 0.000000e+00, i32 %tmp17, double %a14, i32 0 ) ; [#uses=0]
1414 ret void
1515 }
1616
1717 br i1 false, label %cond_true.i31, label %cond_next.i
1818
1919 cond_true.i31: ; preds = %bb.i
20 call void (i32, ...)* @fprintf( i32 0, i8* %tmp11, i8* null )
20 call void (i32, ...) @fprintf( i32 0, i8* %tmp11, i8* null )
2121 ret void
2222
2323 cond_next.i: ; preds = %bb.i
99 %tmp38 = trunc i64 %tmp37 to i32 ; :0 [#uses=1]
1010 %tmp48 = trunc i64 %tmp47 to i32 ; :0 [#uses=1]
1111 %tmp58 = trunc i64 %tmp57 to i32 ; :0 [#uses=1]
12 %tmp40 = tail call i32 (i8*, ...)* @printf( i8* noalias getelementptr ([14 x i8], [14 x i8]* @.str, i32 0, i32 0), i64 %arg, i32 %tmp38, i32 %tmp48, i32 %tmp58 ) nounwind ; [#uses=0]
12 %tmp40 = tail call i32 (i8*, ...) @printf( i8* noalias getelementptr ([14 x i8], [14 x i8]* @.str, i32 0, i32 0), i64 %arg, i32 %tmp38, i32 %tmp48, i32 %tmp58 ) nounwind ; [#uses=0]
1313 ret i32 0
1414 }
1515
66 %tmp106 = load float, float* null, align 4 ; [#uses=1]
77 %tmp113 = fadd float %tmp98, %tmp106 ; [#uses=1]
88 %tmp119 = fsub float %tmp113, 0.000000e+00 ; [#uses=1]
9 call void (i32, ...)* @foo( i32 0, float 0.000000e+00, float %tmp119 ) nounwind
9 call void (i32, ...) @foo( i32 0, float 0.000000e+00, float %tmp119 ) nounwind
1010 ret void
1111 }
1212
1515
1616 not_less: ; preds = %less, %entry
1717 %t2 = phi i32 [ sub (i32 ptrtoint (i32* @XA to i32), i32 ptrtoint (i32* @XB to i32)), %less ], [ sub (i32 ptrtoint (i32* @XA to i32), i32 ptrtoint (i32* @XB to i32)), %entry ] ; [#uses=1]
18 %tmp.39 = call i32 (i8*, ...)* @printf( i8* getelementptr ([16 x i8], [16 x i8]* @.str_1, i64 0, i64 0), i32 %t2 ) ; [#uses=0]
18 %tmp.39 = call i32 (i8*, ...) @printf( i8* getelementptr ([16 x i8], [16 x i8]* @.str_1, i64 0, i64 0), i32 %t2 ) ; [#uses=0]
1919 ret void
2020 }
2121
11
22 define i32 @foo() {
33 entry:
4 %call = tail call i32 (...)* @baz()
5 %call1 = tail call i32 (...)* @baz()
6 %call2 = tail call i32 (...)* @baz()
7 %call3 = tail call i32 (...)* @baz()
8 %call4 = tail call i32 (...)* @baz()
9 %call5 = tail call i32 (...)* @baz()
10 %call6 = tail call i32 (...)* @baz()
11 %call7 = tail call i32 (...)* @baz()
12 %call8 = tail call i32 (...)* @baz()
13 %call9 = tail call i32 (...)* @baz()
14 %call10 = tail call i32 (...)* @baz()
15 %call11 = tail call i32 (...)* @baz()
16 %call12 = tail call i32 (...)* @baz()
17 %call13 = tail call i32 (...)* @baz()
18 %call14 = tail call i32 (...)* @baz()
19 %call15 = tail call i32 (...)* @baz()
20 %call16 = tail call i32 (...)* @baz()
4 %call = tail call i32 (...) @baz()
5 %call1 = tail call i32 (...) @baz()
6 %call2 = tail call i32 (...) @baz()
7 %call3 = tail call i32 (...) @baz()
8 %call4 = tail call i32 (...) @baz()
9 %call5 = tail call i32 (...) @baz()
10 %call6 = tail call i32 (...) @baz()
11 %call7 = tail call i32 (...) @baz()
12 %call8 = tail call i32 (...) @baz()
13 %call9 = tail call i32 (...) @baz()
14 %call10 = tail call i32 (...) @baz()
15 %call11 = tail call i32 (...) @baz()
16 %call12 = tail call i32 (...) @baz()
17 %call13 = tail call i32 (...) @baz()
18 %call14 = tail call i32 (...) @baz()
19 %call15 = tail call i32 (...) @baz()
20 %call16 = tail call i32 (...) @baz()
2121 %call17 = tail call i32 @bar(i32 %call, i32 %call1, i32 %call2, i32 %call3, i32 %call4, i32 %call5, i32 %call6, i32 %call7, i32 %call8, i32 %call9, i32 %call10, i32 %call11, i32 %call12, i32 %call13, i32 %call14, i32 %call15, i32 %call16)
2222 ret i32 %call17
2323 }
1313 br i1 %obit, label %carry, label %normal
1414
1515 normal:
16 %t1 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8], [4 x i8]* @ok, i32 0, i32 0), i32 %sum32 ) nounwind
16 %t1 = tail call i32 (i8*, ...) @printf( i8* getelementptr ([4 x i8], [4 x i8]* @ok, i32 0, i32 0), i32 %sum32 ) nounwind
1717 ret i1 true
1818
1919 carry:
20 %t2 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8], [4 x i8]* @no, i32 0, i32 0) ) nounwind
20 %t2 = tail call i32 (i8*, ...) @printf( i8* getelementptr ([4 x i8], [4 x i8]* @no, i32 0, i32 0) ) nounwind
2121 ret i1 false
2222 }
2323
1111 br i1 %obit, label %overflow, label %normal
1212
1313 normal:
14 %t1 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8], [4 x i8]* @ok, i32 0, i32 0), i32 %sum32 ) nounwind
14 %t1 = tail call i32 (i8*, ...) @printf( i8* getelementptr ([4 x i8], [4 x i8]* @ok, i32 0, i32 0), i32 %sum32 ) nounwind
1515 ret i1 true
1616
1717 overflow:
18 %t2 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8], [4 x i8]* @no, i32 0, i32 0) ) nounwind
18 %t2 = tail call i32 (i8*, ...) @printf( i8* getelementptr ([4 x i8], [4 x i8]* @no, i32 0, i32 0) ) nounwind
1919 ret i1 false
2020 }
2121
2828 br i1 %obit, label %carry, label %normal
2929
3030 normal:
31 %t1 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8], [4 x i8]* @ok, i32 0, i32 0), i32 %sum32 ) nounwind
31 %t1 = tail call i32 (i8*, ...) @printf( i8* getelementptr ([4 x i8], [4 x i8]* @ok, i32 0, i32 0), i32 %sum32 ) nounwind
3232 ret i1 true
3333
3434 carry:
35 %t2 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8], [4 x i8]* @no, i32 0, i32 0) ) nounwind
35 %t2 = tail call i32 (i8*, ...) @printf( i8* getelementptr ([4 x i8], [4 x i8]* @no, i32 0, i32 0) ) nounwind
3636 ret i1 false
3737 }
3838
1111 br i1 %obit, label %overflow, label %normal
1212
1313 normal:
14 %t1 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8], [4 x i8]* @ok, i32 0, i32 0), i32 %sum ) nounwind
14 %t1 = tail call i32 (i8*, ...) @printf( i8* getelementptr ([4 x i8], [4 x i8]* @ok, i32 0, i32 0), i32 %sum ) nounwind
1515 ret i1 true
1616
1717 overflow:
18 %t2 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8], [4 x i8]* @no, i32 0, i32 0) ) nounwind
18 %t2 = tail call i32 (i8*, ...) @printf( i8* getelementptr ([4 x i8], [4 x i8]* @no, i32 0, i32 0) ) nounwind
1919 ret i1 false
2020 }
2121
2727 br i1 %obit, label %overflow, label %normal
2828
2929 normal:
30 %t1 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8], [4 x i8]* @ok, i32 0, i32 0), i32 %sum ) nounwind
30 %t1 = tail call i32 (i8*, ...) @printf( i8* getelementptr ([4 x i8], [4 x i8]* @ok, i32 0, i32 0), i32 %sum ) nounwind
3131 ret i1 true
3232
3333 overflow:
34 %t2 = tail call i32 (i8*, ...)* @printf( i8* getelementptr ([4 x i8], [4 x i8]* @no, i32 0, i32 0) ) nounwind
34 %t2 = tail call i32 (i8*, ...) @printf( i8* getelementptr ([4 x i8], [4 x i8]* @no, i32 0, i32 0) ) nounwind
3535 ret i1 false
3636 }
3737
2626 %reg323 = phi double [ -1.000000e+00, %bb25 ], [ %reg317, %bb42 ] ; [#uses=1]
2727 %reg324 = phi double [ -1.000000e+00, %bb25 ], [ %reg318, %bb42 ] ; [#uses=1]
2828 %reg325 = phi double [ 1.000000e+00, %bb25 ], [ %reg319, %bb42 ] ; [#uses=1]
29 %reg609 = call i32 (i8*, ...)* @printf( i8* getelementptr ([44 x i8], [44 x i8]* @.LC12, i64 0, i64 0), double %reg325, double %reg324, double %reg323, double %reg322, double %reg321 ) ; [#uses=0]
29 %reg609 = call i32 (i8*, ...) @printf( i8* getelementptr ([44 x i8], [44 x i8]* @.LC12, i64 0, i64 0), double %reg325, double %reg324, double %reg323, double %reg322, double %reg321 ) ; [#uses=0]
3030 ret i32 0
3131 }
1313 br i1 %tobool, label %if.then, label %if.end
1414
1515 if.then: ; preds = %entry
16 %call = call i32 (...)* @f()
16 %call = call i32 (...) @f()
1717 store i32 %call, i32* %retval
1818 br label %return
1919
4242 br i1 %tobool, label %if.then, label %if.end
4343
4444 if.then: ; preds = %entry
45 %call = call i32 (...)* @f()
45 %call = call i32 (...) @f()
4646 store i32 %call, i32* %retval
4747 br label %return
4848
7070 br i1 %tobool1, label %if.then, label %if.end
7171
7272 if.then: ; preds = %entry
73 %call = call i32 (...)* @f()
73 %call = call i32 (...) @f()
7474 store i32 %call, i32* %retval
7575 br label %return
7676
9999 br i1 %tobool2, label %if.then, label %if.end
100100
101101 if.then: ; preds = %entry
102 %call = call i32 (...)* @f()
102 %call = call i32 (...) @f()
103103 store i32 %call, i32* %retval
104104 br label %return
105105
126126 br i1 %tobool, label %if.then, label %if.end
127127
128128 if.then: ; preds = %entry
129 %call = call i32 (...)* @f()
129 %call = call i32 (...) @f()
130130 store i32 %call, i32* %retval
131131 br label %return
132132
205205 br i1 %tobool, label %if.then, label %if.end
206206
207207 if.then: ; preds = %entry
208 %call = call i32 (...)* @f()
208 %call = call i32 (...) @f()
209209 store i32 %call, i32* %retval
210210 br label %return
211211
1111 define i32 @main() {
1212 %a = load double, double* @A ; [#uses=4]
1313 %a_fs = getelementptr [8 x i8], [8 x i8]* @a_fstr, i64 0, i64 0 ; [#uses=1]
14 call i32 (i8*, ...)* @printf( i8* %a_fs, double %a ) ; :1 [#uses=0]
14 call i32 (i8*, ...) @printf( i8* %a_fs, double %a ) ; :1 [#uses=0]
1515 %a_d2l = fptosi double %a to i64 ; [#uses=1]
1616 %a_ls = getelementptr [10 x i8], [10 x i8]* @a_lstr, i64 0, i64 0 ; [#uses=1]
17 call i32 (i8*, ...)* @printf( i8* %a_ls, i64 %a_d2l ) ; :2 [#uses=0]
17 call i32 (i8*, ...) @printf( i8* %a_ls, i64 %a_d2l ) ; :2 [#uses=0]
1818 %a_d2i = fptosi double %a to i32 ; [#uses=2]
1919 %a_ds = getelementptr [8 x i8], [8 x i8]* @a_dstr, i64 0, i64 0 ; [#uses=3]
20 call i32 (i8*, ...)* @printf( i8* %a_ds, i32 %a_d2i ) ; :3 [#uses=0]
20 call i32 (i8*, ...) @printf( i8* %a_ds, i32 %a_d2i ) ; :3 [#uses=0]
2121 %a_d2sb = fptosi double %a to i8 ; [#uses=1]
22 call i32 (i8*, ...)* @printf( i8* %a_ds, i8 %a_d2sb ) ; :4 [#uses=0]
22 call i32 (i8*, ...) @printf( i8* %a_ds, i8 %a_d2sb ) ; :4 [#uses=0]
2323 %a_d2i2sb = trunc i32 %a_d2i to i8 ; [#uses=1]
24 call i32 (i8*, ...)* @printf( i8* %a_ds, i8 %a_d2i2sb ) ; :5 [#uses=0]
24 call i32 (i8*, ...) @printf( i8* %a_ds, i8 %a_d2i2sb ) ; :5 [#uses=0]
2525 %b = load i32, i32* @B ; [#uses=2]
2626 %b_ds = getelementptr [8 x i8], [8 x i8]* @b_dstr, i64 0, i64 0 ; [#uses=1]
27 call i32 (i8*, ...)* @printf( i8* %b_ds, i32 %b ) ; :6 [#uses=0]
27 call i32 (i8*, ...) @printf( i8* %b_ds, i32 %b ) ; :6 [#uses=0]
2828 %b_i2d = sitofp i32 %b to double ; [#uses=1]
2929 %b_fs = getelementptr [8 x i8], [8 x i8]* @b_fstr, i64 0, i64 0 ; [#uses=1]
30 call i32 (i8*, ...)* @printf( i8* %b_fs, double %b_i2d ) ; :7 [#uses=0]
30 call i32 (i8*, ...) @printf( i8* %b_fs, double %b_i2d ) ; :7 [#uses=0]
3131 ret i32 0
3232 }
3838 %dpi = fpext float %pi to double ; [#uses=1]
3939 %dfive = fpext float %five to double ; [#uses=1]
4040 %castFmt = getelementptr [44 x i8], [44 x i8]* @fmtArg, i64 0, i64 0 ; [#uses=1]
41 call i32 (i8*, ...)* @printf( i8* %castFmt, double %dsqrtTwo, double %dexp, double %dpi, double %dfive ) ; :1 [#uses=0]
41 call i32 (i8*, ...) @printf( i8* %castFmt, double %dsqrtTwo, double %dexp, double %dpi, double %dfive ) ; :1 [#uses=0]
4242 ret i32 0
4343 }
55
66 define i32 @main() {
77 %s = getelementptr [7 x i8], [7 x i8]* @.str_1, i64 0, i64 0 ; [#uses=1]
8 call i32 (i8*, ...)* @printf( i8* %s ) ; :1 [#uses=0]
8 call i32 (i8*, ...) @printf( i8* %s ) ; :1 [#uses=0]
99 ret i32 0
1010 }
4040 %ioff.upgrd.1 = zext i32 %ioff to i64 ; [#uses=1]
4141 %fptr = getelementptr %Results, %Results* %fval, i64 %ioff.upgrd.1 ; <%Results*> [#uses=1]
4242 %castFmt = getelementptr [39 x i8], [39 x i8]* @fmtArg, i64 0, i64 0 ; [#uses=1]
43 call i32 (i8*, ...)* @printf( i8* %castFmt, i32 %ioff, %Results* %fval, %Results* %fptr ) ; :1 [#uses=0]
43 call i32 (i8*, ...) @printf( i8* %castFmt, i32 %ioff, %Results* %fval, %Results* %fptr ) ; :1 [#uses=0]
4444 ret i32 0
4545 }
4646
1212
1313 ; function and integer
1414 define i32* @test_iAny(i32* %v) gc "statepoint-example" {
15 %tok = call i32 (i1 ()*, i32, i32, ...)* @llvm.experimental.gc.statepoint.p0f_i1f(i1 ()* @return_i1, i32 0, i32 0, i32 0, i32* %v)
15 %tok = call i32 (i1 ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i1f(i1 ()* @return_i1, i32 0, i32 0, i32 0, i32* %v)
1616 %v-new = call i32* @llvm.experimental.gc.relocate.p0i32(i32 %tok, i32 4, i32 4)
1717 ret i32* %v-new
1818 }
1919
2020 ; float
2121 define float* @test_fAny(float* %v) gc "statepoint-example" {
22 %tok = call i32 (i1 ()*, i32, i32, ...)* @llvm.experimental.gc.statepoint.p0f_i1f(i1 ()* @return_i1, i32 0, i32 0, i32 0, float* %v)
22 %tok = call i32 (i1 ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i1f(i1 ()* @return_i1, i32 0, i32 0, i32 0, float* %v)
2323 %v-new = call float* @llvm.experimental.gc.relocate.p0f32(i32 %tok, i32 4, i32 4)
2424 ret float* %v-new
2525 }
2626
2727 ; array of integers
2828 define [3 x i32]* @test_aAny([3 x i32]* %v) gc "statepoint-example" {
29 %tok = call i32 (i1 ()*, i32, i32, ...)* @llvm.experimental.gc.statepoint.p0f_i1f(i1 ()* @return_i1, i32 0, i32 0, i32 0, [3 x i32]* %v)
29 %tok = call i32 (i1 ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i1f(i1 ()* @return_i1, i32 0, i32 0, i32 0, [3 x i32]* %v)
3030 %v-new = call [3 x i32]* @llvm.experimental.gc.relocate.p0a3i32(i32 %tok, i32 4, i32 4)
3131 ret [3 x i32]* %v-new
3232 }
3333
3434 ; vector of integers
3535 define <3 x i32>* @test_vAny(<3 x i32>* %v) gc "statepoint-example" {
36 %tok = call i32 (i1 ()*, i32, i32, ...)* @llvm.experimental.gc.statepoint.p0f_i1f(i1 ()* @return_i1, i32 0, i32 0, i32 0, <3 x i32>* %v)
36 %tok = call i32 (i1 ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i1f(i1 ()* @return_i1, i32 0, i32 0, i32 0, <3 x i32>* %v)
3737 %v-new = call <3 x i32>* @llvm.experimental.gc.relocate.p0v3i32(i32 %tok, i32 4, i32 4)
3838 ret <3 x i32>* %v-new
3939 }
4242
4343 ; struct
4444 define %struct.test* @test_struct(%struct.test* %v) gc "statepoint-example" {
45 %tok = call i32 (i1 ()*, i32, i32, ...)* @llvm.experimental.gc.statepoint.p0f_i1f(i1 ()* @return_i1, i32 0, i32 0, i32 0, %struct.test* %v)
45 %tok = call i32 (i1 ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i1f(i1 ()* @return_i1, i32 0, i32 0, i32 0, %struct.test* %v)
4646 %v-new = call %struct.test* @llvm.experimental.gc.relocate.p0struct.test(i32 %tok, i32 4, i32 4)
4747 ret %struct.test* %v-new
4848 }
66 define i32 @main() {
77 %f = getelementptr [4 x i8], [4 x i8]* @.str_1, i64 0, i64 0 ; [#uses=3]
88 %d = add i32 1, 0 ; [#uses=3]
9 call i32 (i8*, ...)* @printf( i8* %f, i32 %d ) ; :1 [#uses=0]
9 call i32 (i8*, ...) @printf( i8* %f, i32 %d ) ; :1 [#uses=0]
1010 %e = add i32 38, 2 ; [#uses=2]
11 call i32 (i8*, ...)* @printf( i8* %f, i32 %e ) ; :2 [#uses=0]
11 call i32 (i8*, ...) @printf( i8* %f, i32 %e ) ; :2 [#uses=0]
1212 %g = add i32 %d, %d ; [#uses=1]
1313 %h = add i32 %e, %g ; [#uses=1]
14 call i32 (i8*, ...)* @printf( i8* %f, i32 %h ) ; :3 [#uses=0]
14 call i32 (i8*, ...) @printf( i8* %f, i32 %h ) ; :3 [#uses=0]
1515 ret i32 0
1616 }
1717
2121 %b = load double, double* @B ; [#uses=12]
2222 %a_s = getelementptr [8 x i8], [8 x i8]* @a_str, i64 0, i64 0 ; [#uses=1]
2323 %b_s = getelementptr [8 x i8], [8 x i8]* @b_str, i64 0, i64 0 ; [#uses=1]
24 call i32 (i8*, ...)* @printf( i8* %a_s, double %a ) ; :1 [#uses=0]
25 call i32 (i8*, ...)* @printf( i8* %b_s, double %b ) ; :2 [#uses=0]
24 call i32 (i8*, ...) @printf( i8* %a_s, double %a ) ; :1 [#uses=0]
25 call i32 (i8*, ...) @printf( i8* %b_s, double %b ) ; :2 [#uses=0]
2626 %add_r = fadd double %a, %b ; [#uses=1]
2727 %sub_r = fsub double %a, %b ; [#uses=1]
2828 %mul_r = fmul double %a, %b ; [#uses=1]
3333 %mul_s = getelementptr [12 x i8], [12 x i8]* @mul_str, i64 0, i64 0 ; [#uses=1]
3434 %div_s = getelementptr [12 x i8], [12 x i8]* @div_str, i64 0, i64 0 ; [#uses=1]
3535 %rem_s = getelementptr [13 x i8], [13 x i8]* @rem_str, i64 0, i64 0 ; [#uses=1]
36 call i32 (i8*, ...)* @printf( i8* %add_s, double %add_r ) ; :3 [#uses=0]
37 call i32 (i8*, ...)* @printf( i8* %sub_s, double %sub_r ) ; :4 [#uses=0]
38 call i32 (i8*, ...)* @printf( i8* %mul_s, double %mul_r ) ; :5 [#uses=0]
39 call i32 (i8*, ...)* @printf( i8* %div_s, double %div_r ) ; :6 [#uses=0]
40 call i32 (i8*, ...)* @printf( i8* %rem_s, double %rem_r ) ; :7 [#uses=0]
36 call i32 (i8*, ...) @printf( i8* %add_s, double %add_r ) ; :3 [#uses=0]
37 call i32 (i8*, ...) @printf( i8* %sub_s, double %sub_r ) ; :4 [#uses=0]
38 call i32 (i8*, ...) @printf( i8* %mul_s, double %mul_r ) ; :5 [#uses=0]
39 call i32 (i8*, ...) @printf( i8* %div_s, double %div_r ) ; :6 [#uses=0]
40 call i32 (i8*, ...) @printf( i8* %rem_s, double %rem_r ) ; :7 [#uses=0]
4141 %lt_r = fcmp olt double %a, %b ; [#uses=1]
4242 %le_r = fcmp ole double %a, %b ; [#uses=1]
4343 %gt_r = fcmp ogt double %a, %b ; [#uses=1]
5050 %ge_s = getelementptr [13 x i8], [13 x i8]* @ge_str, i64 0, i64 0 ; [#uses=1]
5151 %eq_s = getelementptr [13 x i8], [13 x i8]* @eq_str, i64 0, i64 0 ; [#uses=1]
5252 %ne_s = getelementptr [13 x i8], [13 x i8]* @ne_str, i64 0, i64 0 ; [#uses=1]
53 call i32 (i8*, ...)* @printf( i8* %lt_s, i1 %lt_r ) ; :8 [#uses=0]
54 call i32 (i8*, ...)* @printf( i8* %le_s, i1 %le_r ) ; :9 [#uses=0]
55 call i32 (i8*, ...)* @printf( i8* %gt_s, i1 %gt_r ) ; :10 [#uses=0]
56 call i32 (i8*, ...)* @printf( i8* %ge_s, i1 %ge_r ) ; :11 [#uses=0]
57 call i32 (i8*, ...)* @printf( i8* %eq_s, i1 %eq_r ) ; :12 [#uses=0]
58 call i32 (i8*, ...)* @printf( i8* %ne_s, i1 %ne_r ) ; :13 [#uses=0]
53 call i32 (i8*, ...) @printf( i8* %lt_s, i1 %lt_r ) ; :8 [#uses=0]
54 call i32 (i8*, ...) @printf( i8* %le_s, i1 %le_r ) ; :9 [#uses=0]
55 call i32 (i8*, ...) @printf( i8* %gt_s, i1 %gt_r ) ; :10 [#uses=0]
56 call i32 (i8*, ...) @printf( i8* %ge_s, i1 %ge_r ) ; :11 [#uses=0]
57 call i32 (i8*, ...) @printf( i8* %eq_s, i1 %eq_r ) ; :12 [#uses=0]
58 call i32 (i8*, ...) @printf( i8* %ne_s, i1 %ne_r ) ; :13 [#uses=0]
5959 ret i32 0
6060 }
2626 %b = load i32, i32* @B ; [#uses=17]
2727 %a_s = getelementptr [8 x i8], [8 x i8]* @a_str, i64 0, i64 0 ; [#uses=1]
2828 %b_s = getelementptr [8 x i8], [8 x i8]* @b_str, i64 0, i64 0 ; [#uses=1]
29 call i32 (i8*, ...)* @printf( i8* %a_s, i32 %a ) ; :1 [#uses=0]
30 call i32 (i8*, ...)* @printf( i8* %b_s, i32 %b ) ; :2 [#uses=0]
29 call i32 (i8*, ...) @printf( i8* %a_s, i32 %a ) ; :1 [#uses=0]
30 call i32 (i8*, ...) @printf( i8* %b_s, i32 %b ) ; :2 [#uses=0]
3131 %add_r = add i32 %a, %b ; [#uses=1]
3232 %sub_r = sub i32 %a, %b ; [#uses=1]
3333 %mul_r = mul i32 %a, %b ; [#uses=1]
3838 %mul_s = getelementptr [12 x i8], [12 x i8]* @mul_str, i64 0, i64 0 ; [#uses=1]
3939 %div_s = getelementptr [12 x i8], [12 x i8]* @div_str, i64 0, i64 0 ; [#uses=1]
4040 %rem_s = getelementptr [13 x i8], [13 x i8]* @rem_str, i64 0, i64 0 ; [#uses=1]
41 call i32 (i8*, ...)* @printf( i8* %add_s, i32 %add_r ) ; :3 [#uses=0]
42 call i32 (i8*, ...)* @printf( i8* %sub_s, i32 %sub_r ) ; :4 [#uses=0]
43 call i32 (i8*, ...)* @printf( i8* %mul_s, i32 %mul_r ) ; :5 [#uses=0]
44 call i32 (i8*, ...)* @printf( i8* %div_s, i32 %div_r ) ; :6 [#uses=0]
45 call i32 (i8*, ...)* @printf( i8* %rem_s, i32 %rem_r ) ; :7 [#uses=0]
41 call i32 (i8*, ...) @printf( i8* %add_s, i32 %add_r ) ; :3 [#uses=0]
42 call i32 (i8*, ...) @printf( i8* %sub_s, i32 %sub_r ) ; :4 [#uses=0]
43 call i32 (i8*, ...) @printf( i8* %mul_s, i32 %mul_r ) ; :5 [#uses=0]
44 call i32 (i8*, ...) @printf( i8* %div_s, i32 %div_r ) ; :6 [#uses=0]
45 call i32 (i8*, ...) @printf( i8* %rem_s, i32 %rem_r ) ; :7 [#uses=0]
4646 %lt_r = icmp slt i32 %a, %b ; [#uses=1]
4747 %le_r = icmp sle i32 %a, %b ; [#uses=1]
4848 %gt_r = icmp sgt i32 %a, %b ; [#uses=1]
5555 %ge_s = getelementptr [13 x i8], [13 x i8]* @ge_str, i64 0, i64 0 ; [#uses=1]
5656 %eq_s = getelementptr [13 x i8], [13 x i8]* @eq_str, i64 0, i64 0 ; [#uses=1]
5757 %ne_s = getelementptr [13 x i8], [13 x i8]* @ne_str, i64 0, i64 0 ; [#uses=1]
58 call i32 (i8*, ...)* @printf( i8* %lt_s, i1 %lt_r ) ; :8 [#uses=0]
59 call i32 (i8*, ...)* @printf( i8* %le_s, i1 %le_r ) ; :9 [#uses=0]
60 call i32 (i8*, ...)* @printf( i8* %gt_s, i1 %gt_r ) ; :10 [#uses=0]
61 call i32 (i8*, ...)* @printf( i8* %ge_s, i1 %ge_r ) ; :11 [#uses=0]
62 call i32 (i8*, ...)* @printf( i8* %eq_s, i1 %eq_r ) ; :12 [#uses=0]
63 call i32 (i8*, ...)* @printf( i8* %ne_s, i1 %ne_r ) ; :13 [#uses=0]
58 call i32 (i8*, ...) @printf( i8* %lt_s, i1 %lt_r ) ; :8 [#uses=0]
59 call i32 (i8*, ...) @printf( i8* %le_s, i1 %le_r ) ; :9 [#uses=0]
60 call i32 (i8*, ...) @printf( i8* %gt_s, i1 %gt_r ) ; :10 [#uses=0]
61 call i32 (i8*, ...) @printf( i8* %ge_s, i1 %ge_r ) ; :11 [#uses=0]
62 call i32 (i8*, ...) @printf( i8* %eq_s, i1 %eq_r ) ; :12 [#uses=0]
63 call i32 (i8*, ...) @printf( i8* %ne_s, i1 %ne_r ) ; :13 [#uses=0]
6464 %and_r = and i32 %a, %b ; [#uses=1]
6565 %or_r = or i32 %a, %b ; [#uses=1]
6666 %xor_r = xor i32 %a, %b ; [#uses=1]
7474 %xor_s = getelementptr [12 x i8], [12 x i8]* @xor_str, i64 0, i64 0 ; [#uses=1]
7575 %shl_s = getelementptr [13 x i8], [13 x i8]* @shl_str, i64 0, i64 0 ; [#uses=1]
7676 %shr_s = getelementptr [13 x i8], [13 x i8]* @shr_str, i64 0, i64 0 ; [#uses=1]
77 call i32 (i8*, ...)* @printf( i8* %and_s, i32 %and_r ) ; :14 [#uses=0]
78 call i32 (i8*, ...)* @printf( i8* %or_s, i32 %or_r ) ; :15 [#uses=0]
79 call i32 (i8*, ...)* @printf( i8* %xor_s, i32 %xor_r ) ; :16 [#uses=0]
80 call i32 (i8*, ...)* @printf( i8* %shl_s, i32 %shl_r ) ; :17 [#uses=0]
81 call i32 (i8*, ...)* @printf( i8* %shr_s, i32 %shr_r ) ; :18 [#uses=0]
77 call i32 (i8*, ...) @printf( i8* %and_s, i32 %and_r ) ; :14 [#uses=0]
78 call i32 (i8*, ...) @printf( i8* %or_s, i32 %or_r ) ; :15 [#uses=0]
79 call i32 (i8*, ...) @printf( i8* %xor_s, i32 %xor_r ) ; :16 [#uses=0]
80 call i32 (i8*, ...) @printf( i8* %shl_s, i32 %shl_r ) ; :17 [#uses=0]
81 call i32 (i8*, ...) @printf( i8* %shr_s, i32 %shr_r ) ; :18 [#uses=0]
8282 ret i32 0
8383 }
66 define i32 @main() {
77 %f = getelementptr [4 x i8], [4 x i8]* @.str_1, i64 0, i64 0 ; [#uses=1]
88 %d = add i32 0, 0 ; [#uses=1]
9 %tmp.0 = call i32 (i8*, ...)* @printf( i8* %f, i32 %d ) ; [#uses=0]
9 %tmp.0 = call i32 (i8*, ...) @printf( i8* %f, i32 %d ) ; [#uses=0]
1010 ret i32 0
1111 }
1212
99 %a = load i32, i32* @A ; [#uses=21]
1010 %a_s = getelementptr [8 x i8], [8 x i8]* @a_str, i64 0, i64 0 ; [#uses=1]
1111 %a_mul_s = getelementptr [13 x i8], [13 x i8]* @a_mul_str, i64 0, i64 0 ; [#uses=20]
12 call i32 (i8*, ...)* @printf( i8* %a_s, i32 %a ) ; :1 [#uses=0]
12 call i32 (i8*, ...) @printf( i8* %a_s, i32 %a ) ; :1 [#uses=0]
1313 %r_0 = mul i32 %a, 0 ; [#uses=1]
1414 %r_1 = mul i32 %a, 1 ; [#uses=1]
1515 %r_2 = mul i32 %a, 2 ; [#uses=1]
3030 %r_17 = mul i32 %a, 17 ; [#uses=1]
3131 %r_18 = mul i32 %a, 18 ; [#uses=1]
3232 %r_19 = mul i32 %a, 19 ; [#uses=1]
33 call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 0, i32 %r_0 ) ; :2 [#uses=0]
34 call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 1, i32 %r_1 ) ; :3 [#uses=0]
35 call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 2, i32 %r_2 ) ; :4 [#uses=0]
36 call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 3, i32 %r_3 ) ; :5 [#uses=0]
37 call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 4, i32 %r_4 ) ; :6 [#uses=0]
38 call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 5, i32 %r_5 ) ; :7 [#uses=0]
39 call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 6, i32 %r_6 ) ; :8 [#uses=0]
40 call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 7, i32 %r_7 ) ; :9 [#uses=0]
41 call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 8, i32 %r_8 ) ; :10 [#uses=0]
42 call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 9, i32 %r_9 ) ; :11 [#uses=0]
43 call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 10, i32 %r_10 ) ; :12 [#uses=0]
44 call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 11, i32 %r_11 ) ; :13 [#uses=0]
45 call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 12, i32 %r_12 ) ; :14 [#uses=0]
46 call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 13, i32 %r_13 ) ; :15 [#uses=0]
47 call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 14, i32 %r_14 ) ; :16 [#uses=0]
48 call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 15, i32 %r_15 ) ; :17 [#uses=0]
49 call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 16, i32 %r_16 ) ; :18 [#uses=0]
50 call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 17, i32 %r_17 ) ; :19 [#uses=0]
51 call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 18, i32 %r_18 ) ; :20 [#uses=0]
52 call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 19, i32 %r_19 ) ; :21 [#uses=0]
33 call i32 (i8*, ...) @printf( i8* %a_mul_s, i32 0, i32 %r_0 ) ; :2 [#uses=0]
34 call i32 (i8*, ...) @printf( i8* %a_mul_s, i32 1, i32 %r_1 ) ; :3 [#uses=0]
35 call i32 (i8*, ...) @printf( i8* %a_mul_s, i32 2, i32 %r_2 ) ; :4 [#uses=0]
36 call i32 (i8*, ...) @printf( i8* %a_mul_s, i32 3, i32 %r_3 ) ; :5 [#uses=0]
37 call i32 (i8*, ...) @printf( i8* %a_mul_s, i32 4, i32 %r_4 ) ; :6 [#uses=0]
38 call i32 (i8*, ...) @printf( i8* %a_mul_s, i32 5, i32 %r_5 ) ; :7 [#uses=0]
39 call i32 (i8*, ...) @printf( i8* %a_mul_s, i32 6, i32 %r_6 ) ; :8 [#uses=0]
40 call i32 (i8*, ...) @printf( i8* %a_mul_s, i32 7, i32 %r_7 ) ; :9 [#uses=0]
41 call i32 (i8*, ...) @printf( i8* %a_mul_s, i32 8, i32 %r_8 ) ; :10 [#uses=0]
42 call i32 (i8*, ...) @printf( i8* %a_mul_s, i32 9, i32 %r_9 ) ; :11 [#uses=0]
43 call i32 (i8*, ...) @printf( i8* %a_mul_s, i32 10, i32 %r_10 ) ; :12 [#uses=0]
44 call i32 (i8*, ...) @printf( i8* %a_mul_s, i32 11, i32 %r_11 ) ; :13 [#uses=0]
45 call i32 (i8*, ...) @printf( i8* %a_mul_s, i32 12, i32 %r_12 ) ; :14 [#uses=0]
46 call i32 (i8*, ...) @printf( i8* %a_mul_s, i32 13, i32 %r_13 ) ; :15 [#uses=0]
47 call i32 (i8*, ...) @printf( i8* %a_mul_s, i32 14, i32 %r_14 ) ; :16 [#uses=0]
48 call i32 (i8*, ...) @printf( i8* %a_mul_s, i32 15, i32 %r_15 ) ; :17 [#uses=0]
49 call i32 (i8*, ...) @printf( i8* %a_mul_s, i32 16, i32 %r_16 ) ; :18 [#uses=0]
50 call i32 (i8*, ...) @printf( i8* %a_mul_s, i32 17, i32 %r_17 ) ; :19 [#uses=0]
51 call i32 (i8*, ...) @printf( i8* %a_mul_s, i32 18, i32 %r_18 ) ; :20 [#uses=0]
52 call i32 (i8*, ...) @printf( i8* %a_mul_s, i32 19, i32 %r_19 ) ; :21 [#uses=0]
5353 ret i32 0
5454 }
1414 %a_s = getelementptr [8 x i8], [8 x i8]* @a_str, i64 0, i64 0 ; [#uses=1]
1515 %b_s = getelementptr [8 x i8], [8 x i8]* @b_str, i64 0, i64 0 ; [#uses=1]
1616 %a_mul_s = getelementptr [13 x i8], [13 x i8]* @a_mul_str, i64 0, i64 0 ; [#uses=1]
17 call i32 (i8*, ...)* @printf( i8* %a_s, i32 %a ) ; :0 [#uses=0]
18 call i32 (i8*, ...)* @printf( i8* %b_s, i32 %b ) ; :1 [#uses=0]
17 call i32 (i8*, ...) @printf( i8* %a_s, i32 %a ) ; :0 [#uses=0]
18 call i32 (i8*, ...) @printf( i8* %b_s, i32 %b ) ; :1 [#uses=0]
1919 br label %shl_test
2020
2121 shl_test: ; preds = %shl_test, %entry
2222 %s = phi i32 [ 0, %entry ], [ %s_inc, %shl_test ] ; [#uses=4]
2323 %result = mul i32 %a, %s ; [#uses=1]
24 call i32 (i8*, ...)* @printf( i8* %a_mul_s, i32 %s, i32 %result ) ; :2 [#uses=0]
24 call i32 (i8*, ...) @printf( i8* %a_mul_s, i32 %s, i32 %result ) ; :2 [#uses=0]
2525 %s_inc = add i32 %s, 1 ; [#uses=1]
2626 %done = icmp eq i32 %s, 256 ; [#uses=1]
2727 br i1 %done, label %fini, label %shl_test
1414 %a_s = getelementptr [8 x i8], [8 x i8]* @a_str, i64 0, i64 0 ; [#uses=1]
1515 %b_s = getelementptr [8 x i8], [8 x i8]* @b_str, i64 0, i64 0 ; [#uses=1]
1616 %a_shl_s = getelementptr [14 x i8], [14 x i8]* @a_shl_str, i64 0, i64 0 ; [#uses=1]
17 call i32 (i8*, ...)* @printf( i8* %a_s, i32 %a ) ; :0 [#uses=0]
18 call i32 (i8*, ...)* @printf( i8* %b_s, i32 %b ) ; :1 [#uses=0]
17 call i32 (i8*, ...) @printf( i8* %a_s, i32 %a ) ; :0 [#uses=0]
18 call i32 (i8*, ...) @printf( i8* %b_s, i32 %b ) ; :1 [#uses=0]
1919 br label %shl_test
2020
2121 shl_test: ; preds = %shl_test, %entry
2222 %s = phi i8 [ 0, %entry ], [ %s_inc, %shl_test ] ; [#uses=4]
2323 %shift.upgrd.1 = zext i8 %s to i32 ; [#uses=1]
2424 %result = shl i32 %a, %shift.upgrd.1 ; [#uses=1]
25 call i32 (i8*, ...)* @printf( i8* %a_shl_s, i8 %s, i32 %result ) ; :2 [#uses=0]
25 call i32 (i8*, ...) @printf( i8* %a_shl_s, i8 %s, i32 %result ) ; :2 [#uses=0]
2626 %s_inc = add i8 %s, 1 ; [#uses=1]
2727 %done = icmp eq i8 %s, 32 ; [#uses=1]
2828 br i1 %done, label %fini, label %shl_test
3434 %ge_s = getelementptr [13 x i8], [13 x i8]* @ge_str, i64 0, i64 0
3535 %eq_s = getelementptr [13 x i8], [13 x i8]* @eq_str, i64 0, i64 0
3636 %ne_s = getelementptr [13 x i8], [13 x i8]* @ne_str, i64 0, i64 0
37 call i32 (i8*, ...)* @printf( i8* %lt_s, i16 %val1 )
37 call i32 (i8*, ...) @printf( i8* %lt_s, i16 %val1 )
3838 ret i32 0
3939 }
3333 %ge_s = getelementptr [13 x i8], [13 x i8]* @ge_str, i64 0, i64 0
3434 %eq_s = getelementptr [13 x i8], [13 x i8]* @eq_str, i64 0, i64 0
3535 %ne_s = getelementptr [13 x i8], [13 x i8]* @ne_str, i64 0, i64 0
36 call i32 (i8*, ...)* @printf( i8* %lt_s, i1 %lt_r )
37 call i32 (i8*, ...)* @printf( i8* %le_s, i1 %le_r )
38 call i32 (i8*, ...)* @printf( i8* %gt_s, i1 %gt_r )
39 call i32 (i8*, ...)* @printf( i8* %ge_s, i1 %ge_r )
40 call i32 (i8*, ...)* @printf( i8* %eq_s, i1 %eq_r )
41 call i32 (i8*, ...)* @printf( i8* %ne_s, i1 %ne_r )
36 call i32 (i8*, ...) @printf( i8* %lt_s, i1 %lt_r )
37 call i32 (i8*, ...) @printf( i8* %le_s, i1 %le_r )
38 call i32 (i8*, ...) @printf( i8* %gt_s, i1 %gt_r )
39 call i32 (i8*, ...) @printf( i8* %ge_s, i1 %ge_r )
40 call i32 (i8*, ...) @printf( i8* %eq_s, i1 %eq_r )
41 call i32 (i8*, ...) @printf( i8* %ne_s, i1 %ne_r )
4242 ret i32 0
4343 }
3434 %ge_s = getelementptr [13 x i8], [13 x i8]* @ge_str, i64 0, i64 0
3535 %eq_s = getelementptr [13 x i8], [13 x i8]* @eq_str, i64 0, i64 0
3636 %ne_s = getelementptr [13 x i8], [13 x i8]* @ne_str, i64 0, i64 0
37 call i32 (i8*, ...)* @printf( i8* %lt_s, i8 %val1 )
37 call i32 (i8*, ...) @printf( i8* %lt_s, i8 %val1 )
3838 ret i32 0
3939 }
7575 %arrayidx24 = getelementptr inbounds i8, i8* %tmp1, i32 24
7676 %7 = bitcast i8* %arrayidx24 to i32*
7777 %tmp25 = load i32, i32* %7, align 4
78 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str, i32 0, i32 0), i32 %tmp7, i32 %tmp10, i32 %tmp13, i32 %tmp16, i32 %tmp19, i32 %tmp22, i32 %tmp25) nounwind
78 %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str, i32 0, i32 0), i32 %tmp7, i32 %tmp10, i32 %tmp13, i32 %tmp16, i32 %tmp19, i32 %tmp22, i32 %tmp25) nounwind
7979 ret i32 0
8080 }
8181
5959 unreachable
6060
6161 if.end: ; preds = %entry
62 tail call void (...)* @f2() nounwind
62 tail call void (...) @f2() nounwind
6363 ret void
6464 }
6565
99 %1 = load i32, i32* @y, align 4
1010 %and = and i32 %0, %1
1111 ; 16: and ${{[0-9]+}}, ${{[0-9]+}}
12 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i32 0, i32 0), i32 %and)
12 %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i32 0, i32 0), i32 %and)
1313 ret i32 0
1414 }
1515
1818 %0 = atomicrmw add i32* %x, i32 1 seq_cst
1919 %add.i = add nsw i32 %0, 2
2020 %1 = load volatile i32, i32* %x, align 4
21 %call1 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0), i32 %add.i, i32 %1) nounwind
21 %call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0), i32 %add.i, i32 %1) nounwind
2222 %pair = cmpxchg i32* %x, i32 1, i32 2 seq_cst seq_cst
2323 %2 = extractvalue { i32, i1 } %pair, 0
2424 %3 = load volatile i32, i32* %x, align 4
25 %call2 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0), i32 %2, i32 %3) nounwind
25 %call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0), i32 %2, i32 %3) nounwind
2626 %4 = atomicrmw xchg i32* %x, i32 1 seq_cst
2727 %5 = load volatile i32, i32* %x, align 4
28 %call3 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0), i32 %4, i32 %5) nounwind
28 %call3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0), i32 %4, i32 %5) nounwind
2929 ; 16-LABEL: main:
3030 ; 16: lw ${{[0-9]+}}, %call16(__sync_synchronize)(${{[0-9]+}})
3131 ; 16: lw ${{[0-9]+}}, %call16(__sync_fetch_and_add_4)(${{[0-9]+}})
99 entry:
1010 %retval = alloca i32, align 4
1111 store i32 0, i32* %retval
12 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([32 x i8], [32 x i8]* @buffer, i32 0, i32 0))
12 %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([32 x i8], [32 x i8]* @buffer, i32 0, i32 0))
1313 %call1 = call i8* @strcpy(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @buffer, i32 0, i32 0), i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str1, i32 0, i32 0)) #3
1414 call void @llvm.clear_cache(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @buffer, i32 0, i32 0), i8* getelementptr inbounds (i8, i8* getelementptr inbounds ([32 x i8], [32 x i8]* @buffer, i32 0, i32 0), i32 32)) #3
15 %call2 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([32 x i8], [32 x i8]* @buffer, i32 0, i32 0))
15 %call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([32 x i8], [32 x i8]* @buffer, i32 0, i32 0))
1616 ret i32 0
1717 }
1818
143143 %1 = bitcast %struct.SmallStruct_1b* %0 to { i8 }*
144144 %2 = getelementptr { i8 }, { i8 }* %1, i32 0, i32 0
145145 %3 = load i8, i8* %2, align 1
146 call void (i8*, ...)* @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i8 inreg %3)
146 call void (i8*, ...) @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i8 inreg %3)
147147 ret void
148148 ; CHECK-LABEL: smallStruct_1b:
149149 ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56
157157 %1 = bitcast %struct.SmallStruct_2b* %0 to { i16 }*
158158 %2 = getelementptr { i16 }, { i16 }* %1, i32 0, i32 0
159159 %3 = load i16, i16* %2, align 1
160 call void (i8*, ...)* @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i16 inreg %3)
160 call void (i8*, ...) @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i16 inreg %3)
161161 ret void
162162 ; CHECK-LABEL: smallStruct_2b:
163163 ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 48
174174 call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 3, i32 0, i1 false)
175175 %3 = getelementptr { i24 }, { i24 }* %.coerce, i32 0, i32 0
176176 %4 = load i24, i24* %3, align 1
177 call void (i8*, ...)* @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i24 inreg %4)
177 call void (i8*, ...) @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i24 inreg %4)
178178 ret void
179179 ; CHECK-LABEL: smallStruct_3b:
180180 ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 40
190190 %1 = bitcast %struct.SmallStruct_4b* %0 to { i32 }*
191191 %2 = getelementptr { i32 }, { i32 }* %1, i32 0, i32 0
192192 %3 = load i32, i32* %2, align 1
193 call void (i8*, ...)* @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i32 inreg %3)
193 call void (i8*, ...) @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i32 inreg %3)
194194 ret void
195195 ; CHECK-LABEL: smallStruct_4b:
196196 ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 32
207207 call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 5, i32 0, i1 false)
208208 %3 = getelementptr { i40 }, { i40 }* %.coerce, i32 0, i32 0
209209 %4 = load i40, i40* %3, align 1
210 call void (i8*, ...)* @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i40 inreg %4)
210 call void (i8*, ...) @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i40 inreg %4)
211211 ret void
212212 ; CHECK-LABEL: smallStruct_5b:
213213 ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 24
224224 call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 6, i32 0, i1 false)
225225 %3 = getelementptr { i48 }, { i48 }* %.coerce, i32 0, i32 0
226226 %4 = load i48, i48* %3, align 1
227 call void (i8*, ...)* @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i48 inreg %4)
227 call void (i8*, ...) @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i48 inreg %4)
228228 ret void
229229 ; CHECK-LABEL: smallStruct_6b:
230230 ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 16
241241 call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 7, i32 0, i1 false)
242242 %3 = getelementptr { i56 }, { i56 }* %.coerce, i32 0, i32 0
243243 %4 = load i56, i56* %3, align 1
244 call void (i8*, ...)* @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i56 inreg %4)
244 call void (i8*, ...) @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i56 inreg %4)
245245 ret void
246246 ; CHECK-LABEL: smallStruct_7b:
247247 ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 8
255255 %1 = bitcast %struct.SmallStruct_8b* %0 to { i64 }*
256256 %2 = getelementptr { i64 }, { i64 }* %1, i32 0, i32 0
257257 %3 = load i64, i64* %2, align 1
258 call void (i8*, ...)* @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i64 inreg %3)
258 call void (i8*, ...) @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i64 inreg %3)
259259 ret void
260260 ; CHECK-LABEL: smallStruct_8b:
261261 ; CHECK-NOT: dsll
274274 %4 = load i64, i64* %3, align 1
275275 %5 = getelementptr { i64, i8 }, { i64, i8 }* %.coerce, i32 0, i32 1
276276 %6 = load i8, i8* %5, align 1
277 call void (i8*, ...)* @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i64 inreg %4, i8 inreg %6)
277 call void (i8*, ...) @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i64 inreg %4, i8 inreg %6)
278278 ret void
279279 ; CHECK-LABEL: smallStruct_9b:
280280 ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56
7777 %1 = bitcast %struct.SmallStruct_1b1s* %0 to { i32 }*
7878 %2 = getelementptr { i32 }, { i32 }* %1, i32 0, i32 0
7979 %3 = load i32, i32* %2, align 1
80 call void (i8*, ...)* @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i32 inreg %3)
80 call void (i8*, ...) @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i32 inreg %3)
8181 ret void
8282 ; CHECK-LABEL: smallStruct_1b1s:
8383 ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 32
9191 %1 = bitcast %struct.SmallStruct_1b1i* %0 to { i64 }*
9292 %2 = getelementptr { i64 }, { i64 }* %1, i32 0, i32 0
9393 %3 = load i64, i64* %2, align 1
94 call void (i8*, ...)* @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i64 inreg %3)
94 call void (i8*, ...) @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i64 inreg %3)
9595 ret void
9696 ; CHECK-LABEL: smallStruct_1b1i:
9797 ; CHECK-NOT: dsll
108108 call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 6, i32 0, i1 false)
109109 %3 = getelementptr { i48 }, { i48 }* %.coerce, i32 0, i32 0
110110 %4 = load i48, i48* %3, align 1
111 call void (i8*, ...)* @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i48 inreg %4)
111 call void (i8*, ...) @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i48 inreg %4)
112112 ret void
113113 ; CHECK-LABEL: smallStruct_1b1s1b:
114114 ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 16
124124 %1 = bitcast %struct.SmallStruct_1s1i* %0 to { i64 }*
125125 %2 = getelementptr { i64 }, { i64 }* %1, i32 0, i32 0
126126 %3 = load i64, i64* %2, align 1
127 call void (i8*, ...)* @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i64 inreg %3)
127 call void (i8*, ...) @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i64 inreg %3)
128128 ret void
129129 ; CHECK-LABEL: smallStruct_1s1i:
130130 ; CHECK-NOT: dsll
141141 call void @llvm.memcpy.p0i8.p0i8.i64(i8* %1, i8* %2, i64 6, i32 0, i1 false)
142142 %3 = getelementptr { i48 }, { i48 }* %.coerce, i32 0, i32 0
143143 %4 = load i48, i48* %3, align 1
144 call void (i8*, ...)* @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i48 inreg %4)
144 call void (i8*, ...) @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i48 inreg %4)
145145 ret void
146146 ; CHECK-LABEL: smallStruct_3b1s:
147147 ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 16
145145 %33 = bitcast %struct.SmallStruct_1b* %8 to { i8 }*
146146 %34 = getelementptr { i8 }, { i8 }* %33, i32 0, i32 0
147147 %35 = load i8, i8* %34, align 1
148 call void (i8*, ...)* @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i8 inreg %11, i8 inreg %14, i8 inreg %17, i8 inreg %20, i8 inreg %23, i8 inreg %26, i8 inreg %29, i8 inreg %32, i8 inreg %35)
148 call void (i8*, ...) @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i8 inreg %11, i8 inreg %14, i8 inreg %17, i8 inreg %20, i8 inreg %23, i8 inreg %26, i8 inreg %29, i8 inreg %32, i8 inreg %35)
149149 ret void
150150 ; CHECK-LABEL: smallStruct_1b_x9:
151151 ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56
3333
3434 %val1 = load volatile double, double* @var
3535 %val2 = load volatile double, double* @var
36 call void (...)* @foo() nounwind
36 call void (...) @foo() nounwind
3737 store volatile double %val1, double* @var
3838 store volatile double %val2, double* @var
3939 ret void
66
77 define i8* @f1(i32 %offset, i8* %handler) {
88 entry:
9 call void (...)* @foo()
9 call void (...) @foo()
1010 call void @llvm.eh.return.i32(i32 %offset, i8* %handler)
1111 unreachable
1212
77
88 define void @f1(i64 %offset, i8* %handler) {
99 entry:
10 call void (...)* @foo()
10 call void (...) @foo()
1111 call void @llvm.eh.return.i64(i64 %offset, i8* %handler)
1212 unreachable
1313
2323 br i1 %cmp, label %if.then, label %if.else
2424
2525 if.then: ; preds = %entry
26 tail call void (...)* @g0() nounwind
26 tail call void (...) @g0() nounwind
2727 br label %if.end
2828
2929 if.else: ; preds = %entry
30 tail call void (...)* @g1() nounwind
30 tail call void (...) @g1() nounwind
3131 br label %if.end
3232
3333 if.end: ; preds = %if.else, %if.then
5656 br i1 %cmp, label %if.then, label %if.else
5757
5858 if.then: ; preds = %entry
59 tail call void (...)* @g0() nounwind
59 tail call void (...) @g0() nounwind
6060 br label %if.end
6161
6262 if.else: ; preds = %entry
63 tail call void (...)* @g1() nounwind
63 tail call void (...) @g1() nounwind
6464 br label %if.end
6565
6666 if.end: ; preds = %if.else, %if.then
8585 br i1 %cmp, label %if.else, label %if.then
8686
8787 if.then: ; preds = %entry
88 tail call void (...)* @g0() nounwind
88 tail call void (...) @g0() nounwind
8989 br label %if.end
9090
9191 if.else: ; preds = %entry
92 tail call void (...)* @g1() nounwind
92 tail call void (...) @g1() nounwind
9393 br label %if.end
9494
9595 if.end: ; preds = %if.else, %if.then
115115 br i1 %cmp, label %if.then, label %if.else
116116
117117 if.then: ; preds = %entry
118 tail call void (...)* @g0() nounwind
118 tail call void (...) @g0() nounwind
119119 br label %if.end
120120
121121 if.else: ; preds = %entry
122 tail call void (...)* @g1() nounwind
122 tail call void (...) @g1() nounwind
123123 br label %if.end
124124
125125 if.end: ; preds = %if.else, %if.then
144144 br i1 %cmp, label %if.then, label %if.else
145145
146146 if.then: ; preds = %entry
147 tail call void (...)* @g0() nounwind
147 tail call void (...) @g0() nounwind
148148 br label %if.end
149149
150150 if.else: ; preds = %entry
151 tail call void (...)* @g1() nounwind
151 tail call void (...) @g1() nounwind
152152 br label %if.end
153153
154154 if.end: ; preds = %if.else, %if.then
173173 br i1 %cmp, label %if.else, label %if.then
174174
175175 if.then: ; preds = %entry
176 tail call void (...)* @g0() nounwind
176 tail call void (...) @g0() nounwind
177177 br label %if.end
178178
179179 if.else: ; preds = %entry
180 tail call void (...)* @g1() nounwind
180 tail call void (...) @g1() nounwind
181181 br label %if.end
182182
183183 if.end: ; preds = %if.else, %if.then
1616 ; CHECK: jalr
1717 ; CHECK-NOT: got({{.*}})($gp)
1818 ; CHECK: lw $gp
19 tail call void (...)* @f1() nounwind
19 tail call void (...) @f1() nounwind
2020 %tmp = load i32, i32* @p, align 4
2121 tail call void @f2(i32 %tmp) nounwind
2222 %tmp1 = load i32, i32* @q, align 4
1111
1212 define i32 @main() nounwind {
1313 entry:
14 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i32 0, i32 0))
14 %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i32 0, i32 0))
1515 ret i32 0
1616
1717 ; SR: .set mips16
7676 %4 = load float, float* @lx, align 4
7777 %cmp = fcmp oeq float %3, %4
7878 %conv2 = zext i1 %cmp to i32
79 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i32 0, i32 0), double %conv, double %conv1, i32 %conv2)
79 %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i32 0, i32 0), double %conv, double %conv1, i32 %conv2)
8080 call void @clear()
8181 store double 0x41678C29C0000000, double* @lxd, align 8
8282 %5 = load double, double* @lxd, align 8
8787 %9 = load double, double* @lxd, align 8
8888 %cmp3 = fcmp oeq double %8, %9
8989 %conv4 = zext i1 %cmp3 to i32
90 %call5 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i32 0, i32 0), double %6, double %7, i32 %conv4)
90 %call5 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i32 0, i32 0), double %6, double %7, i32 %conv4)
9191 call void @clear()
9292 store float 9.000000e+00, float* @lx, align 4
9393 store float 1.000000e+01, float* @ly, align 4
116116 land.end: ; preds = %land.rhs, %entry
117117 %20 = phi i1 [ false, %entry ], [ %cmp12, %land.rhs ]
118118 %land.ext = zext i1 %20 to i32
119 %call14 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str1, i32 0, i32 0), double %conv6, double %conv7, double %conv8, double %conv9, i32 %land.ext)
119 %call14 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str1, i32 0, i32 0), double %conv6, double %conv7, double %conv8, double %conv9, i32 %land.ext)
120120 call void @clear()
121121 store float 0x3FFE666660000000, float* @lx, align 4
122122 store double 0x4007E613249FF279, double* @lyd, align 8
138138 %cmp19 = fcmp oeq double %29, %30
139139 %conv20 = zext i1 %cmp19 to i32
140140 %and = and i32 %conv18, %conv20
141 %call21 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str1, i32 0, i32 0), double %conv15, double %conv16, double %25, double %26, i32 %and)
141 %call21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str1, i32 0, i32 0), double %conv15, double %conv16, double %25, double %26, i32 %and)
142142 call void @clear()
143143 store double 0x4194E54F94000000, double* @lxd, align 8
144144 store float 7.600000e+01, float* @ly, align 4
160160 %cmp26 = fcmp oeq float %39, %40
161161 %conv27 = zext i1 %cmp26 to i32
162162 %and28 = and i32 %conv25, %conv27
163 %call29 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str1, i32 0, i32 0), double %33, double %34, double %conv22, double %conv23, i32 %and28)
163 %call29 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str1, i32 0, i32 0), double %33, double %34, double %conv22, double %conv23, i32 %and28)
164164 call void @clear()
165165 store double 7.365198e+07, double* @lxd, align 8
166166 store double 0x416536CD80000000, double* @lyd, align 8
180180 %cmp32 = fcmp oeq double %49, %50
181181 %conv33 = zext i1 %cmp32 to i32
182182 %and34 = and i32 %conv31, %conv33
183 %call35 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str1, i32 0, i32 0), double %43, double %44, double %45, double %46, i32 %and34)
183 %call35 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str1, i32 0, i32 0), double %43, double %44, double %45, double %46, i32 %and34)
184184 call void @clear()
185185 store float 0x4016666660000000, float* @ret_sf, align 4
186186 %call36 = call float @sf_v()
193193 %54 = load float, float* @lret_sf, align 4
194194 %cmp39 = fcmp oeq float %53, %54
195195 %conv40 = zext i1 %cmp39 to i32
196 %call41 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i32 0, i32 0), double %conv37, double %conv38, i32 %conv40)
196 %call41 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i32 0, i32 0), double %conv37, double %conv38, i32 %conv40)
197197 call void @clear()
198198 store float 4.587300e+06, float* @ret_sf, align 4
199199 store float 3.420000e+02, float* @lx, align 4
217217 %cmp49 = fcmp oeq float %62, %63
218218 %conv50 = zext i1 %cmp49 to i32
219219 %and51 = and i32 %conv48, %conv50
220 %call52 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str1, i32 0, i32 0), double %conv43, double %conv44, double %conv45, double %conv46, i32 %and51)
220 %call52 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str1, i32 0, i32 0), double %conv43, double %conv44, double %conv45, double %conv46, i32 %and51)
221221 call void @clear()
222222 store float 4.445910e+06, float* @ret_sf, align 4
223223 store double 0x419A7DB294000000, double* @lxd, align 8
239239 %cmp58 = fcmp oeq double %71, %72
240240 %conv59 = zext i1 %cmp58 to i32
241241 %and60 = and i32 %conv57, %conv59
242 %call61 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str1, i32 0, i32 0), double %conv54, double %conv55, double %67, double %68, i32 %and60)
242 %call61 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str1, i32 0, i32 0), double %conv54, double %conv55, double %67, double %68, i32 %and60)
243243 call void @clear()
244244 store float 0x3FFF4BC6A0000000, float* @ret_sf, align 4
245245 store float 4.445500e+03, float* @lx, align 4
280280 land.end76: ; preds = %land.rhs73, %land.lhs.true, %land.end
281281 %87 = phi i1 [ false, %land.lhs.true ], [ false, %land.end ], [ %cmp74, %land.rhs73 ]
282282 %land.ext77 = zext i1 %87 to i32
283 %call78 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str2, i32 0, i32 0), double %conv63, double %conv64, double %conv65, double %conv66, double %conv67, double %conv68, i32 %land.ext77)
283 %call78 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str2, i32 0, i32 0), double %conv63, double %conv64, double %conv65, double %conv66, double %conv67, double %conv68, i32 %land.ext77)
284284 call void @clear()
285285 store float 9.991300e+04, float* @ret_sf, align 4
286286 store float 1.114500e+04, float* @lx, align 4
319319 land.end92: ; preds = %land.rhs89, %land.lhs.true86, %land.end76
320320 %102 = phi i1 [ false, %land.lhs.true86 ], [ false, %land.end76 ], [ %cmp90, %land.rhs89 ]
321321 %land.ext93 = zext i1 %102 to i32
322 %call94 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str2, i32 0, i32 0), double %conv80, double %conv81, double %conv82, double %conv83, double %94, double %95, i32 %land.ext93)
322 %call94 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str2, i32 0, i32 0), double %conv80, double %conv81, double %conv82, double %conv83, double %94, double %95, i32 %land.ext93)
323323 call void @clear()
324324 store float 0x417CCC7A00000000, float* @ret_sf, align 4
325325 store double 0x4172034530000000, double* @lxd, align 8
358358 land.end108: ; preds = %land.rhs105, %land.lhs.true102, %land.end92
359359 %117 = phi i1 [ false, %land.lhs.true102 ], [ false, %land.end92 ], [ %cmp106, %land.rhs105 ]
360360 %land.ext109 = zext i1 %117 to i32
361 %call110 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str2, i32 0, i32 0), double %conv96, double %conv97, double %107, double %108, double %conv98, double %conv99, i32 %land.ext109)
361 %call110 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str2, i32 0, i32 0), double %conv96, double %conv97, double %107, double %108, double %conv98, double %conv99, i32 %land.ext109)
362362 call void @clear()
363363 store float 3.987721e+06, float* @ret_sf, align 4
364364 store double 0x3FF1F49F6DDDC2D8, double* @lxd, align 8
395395 land.end122: ; preds = %land.rhs119, %land.lhs.true116, %land.end108
396396 %132 = phi i1 [ false, %land.lhs.true116 ], [ false, %land.end108 ], [ %cmp120, %land.rhs119 ]
397397 %land.ext123 = zext i1 %132 to i32
398 %call124 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str2, i32 0, i32 0), double %conv112, double %conv113, double %122, double %123, double %124, double %125, i32 %land.ext123)
398 %call124 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str2, i32 0, i32 0), double %conv112, double %conv113, double %122, double %123, double %124, double %125, i32 %land.ext123)
399399 call void @clear()
400400 store double 1.561234e+01, double* @ret_df, align 8
401401 %call125 = call double @df_v()
406406 %136 = load double, double* @lret_df, align 8
407407 %cmp126 = fcmp oeq double %135, %136
408408 %conv127 = zext i1 %cmp126 to i32
409 %call128 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i32 0, i32 0), double %133, double %134, i32 %conv127)
409 %call128 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i32 0, i32 0), double %133, double %134, i32 %conv127)
410410 call void @clear()
411411 store double 1.345873e+01, double* @ret_df, align 8
412412 store float 3.434520e+05, float* @lx, align 4
428428 %cmp134 = fcmp oeq float %144, %145
429429 %conv135 = zext i1 %cmp134 to i32
430430 %and136 = and i32 %conv133, %conv135
431 %call137 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str1, i32 0, i32 0), double %138, double %139, double %conv130, double %conv131, i32 %and136)
431 %call137 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str1, i32 0, i32 0), double %138, double %139, double %conv130, double %conv131, i32 %and136)
432432 call void @clear()
433433 store double 0x4084F3AB7AA25D8D, double* @ret_df, align 8
434434 store double 0x4114F671D2F1A9FC, double* @lxd, align 8
448448 %cmp141 = fcmp oeq double %153, %154
449449 %conv142 = zext i1 %cmp141 to i32
450450 %and143 = and i32 %conv140, %conv142
451 %call144 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str1, i32 0, i32 0), double %147, double %148, double %149, double %150, i32 %and143)
451 %call144 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str1, i32 0, i32 0), double %147, double %148, double %149, double %150, i32 %and143)
452452 call void @clear()
453453 store double 6.781956e+03, double* @ret_df, align 8
454454 store float 4.445500e+03, float* @lx, align 4
487487 land.end158: ; preds = %land.rhs155, %land.lhs.true152, %land.end122
488488 %169 = phi i1 [ false, %land.lhs.true152 ], [ false, %land.end122 ], [ %cmp156, %land.rhs155 ]
489489 %land.ext159 = zext i1 %169 to i32
490 %call160 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str2, i32 0, i32 0), double %157, double %158, double %conv146, double %conv147, double %conv148, double %conv149, i32 %land.ext159)
490 %call160 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str2, i32 0, i32 0), double %157, double %158, double %conv146, double %conv147, double %conv148, double %conv149, i32 %land.ext159)
491491 call void @clear()
492492 store double 1.889130e+05, double* @ret_df, align 8
493493 store float 9.111450e+05, float* @lx, align 4
524524 land.end172: ; preds = %land.rhs169, %land.lhs.true166, %land.end158
525525 %184 = phi i1 [ false, %land.lhs.true166 ], [ false, %land.end158 ], [ %cmp170, %land.rhs169 ]
526526 %land.ext173 = zext i1 %184 to i32
527 %call174 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str2, i32 0, i32 0), double %172, double %173, double %conv162, double %conv163, double %176, double %177, i32 %land.ext173)
527 %call174 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str2, i32 0, i32 0), double %172, double %173, double %conv162, double %conv163, double %176, double %177, i32 %land.ext173)
528528 call void @clear()
529529 store double 0x418B2DB900000000, double* @ret_df, align 8
530530 store double 0x41B1EF2ED3000000, double* @lxd, align 8
561561 land.end186: ; preds = %land.rhs183, %land.lhs.true180, %land.end172
562562 %199 = phi i1 [ false, %land.lhs.true180 ], [ false, %land.end172 ], [ %cmp184, %land.rhs183 ]
563563 %land.ext187 = zext i1 %199 to i32
564 %call188 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str2, i32 0, i32 0), double %187, double %188, double %189, double %190, double %conv176, double %conv177, i32 %land.ext187)
564 %call188 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str2, i32 0, i32 0), double %187, double %188, double %189, double %190, double %conv176, double %conv177, i32 %land.ext187)
565565 call void @clear()
566566 store double 3.987721e+06, double* @ret_df, align 8
567567 store double 5.223560e+00, double* @lxd, align 8
596596 land.end198: ; preds = %land.rhs195, %land.lhs.true192, %land.end186
597597 %214 = phi i1 [ false, %land.lhs.true192 ], [ false, %land.end186 ], [ %cmp196, %land.rhs195 ]
598598 %land.ext199 = zext i1 %214 to i32
599 %call200 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str2, i32 0, i32 0), double %202, double %203, double %204, double %205, double %206, double %207, i32 %land.ext199)
599 %call200 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str2, i32 0, i32 0), double %202, double %203, double %204, double %205, double %206, double %207, i32 %land.ext199)
600600 call void @clear()
601601 store float 4.500000e+00, float* getelementptr inbounds ({ float, float }, { float, float }* @ret_sc, i32 0, i32 0)
602602 store float 7.000000e+00, float* getelementptr inbounds ({ float, float }, { float, float }* @ret_sc, i32 0, i32 1)
629629 %cmp.i = fcmp oeq float %ret_sc.imag215, %lret_sc.imag217
630630 %and.ri = and i1 %cmp.r, %cmp.i
631631 %conv218 = zext i1 %and.ri to i32
632 %call219 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str3, i32 0, i32 0), double %conv202, double %conv207, double %conv208, double %conv213, i32 %conv218)
632 %call219 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str3, i32 0, i32 0), double %conv202, double %conv207, double %conv208, double %conv213, i32 %conv218)
633633 call void @clear()
634634 store float 0x3FF7A99300000000, float* @lx, align 4
635635 store float 4.500000e+00, float* getelementptr inbounds ({ float, float }, { float, float }* @ret_sc, i32 0, i32 0)
678678 land.end250: ; preds = %land.rhs247, %land.end198
679679 %224 = phi i1 [ false, %land.end198 ], [ %cmp248, %land.rhs247 ]
680680 %land.ext251 = zext i1 %224 to i32
681 %call252 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str4, i32 0, i32 0), double %conv223, double %conv228, double %conv231, double %conv236, double %conv237, double %conv238, i32 %land.ext251)
681 %call252 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str4, i32 0, i32 0), double %conv223, double %conv228, double %conv231, double %conv236, double %conv237, double %conv238, i32 %land.ext251)
682682 call void @clear()
683683 store double 1.234500e+03, double* getelementptr inbounds ({ double, double }, { double, double }* @ret_dc, i32 0, i32 0)
684684 store double 7.677000e+03, double* getelementptr inbounds ({ double, double }, { double, double }* @ret_dc, i32 0, i32 1)
703703 %cmp.i263 = fcmp oeq double %ret_dc.imag259, %lret_dc.imag261
704704 %and.ri264 = and i1 %cmp.r262, %cmp.i263
705705 %conv265 = zext i1 %and.ri264 to i32
706 %call266 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str3, i32 0, i32 0), double %ret_dc.real, double %ret_dc.imag255, double %lret_dc.real, double %lret_dc.imag257, i32 %conv265)
706 %call266 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str3, i32 0, i32 0), double %ret_dc.real, double %ret_dc.imag255, double %lret_dc.real, double %lret_dc.imag257, i32 %conv265)
707707 call void @clear()
708708 store double 0x40AAF6F532617C1C, double* @lxd, align 8
709709 store double 4.444500e+03, double* getelementptr inbounds ({ double, double }, { double, double }* @ret_dc, i32 0, i32 0)
744744 land.end289: ; preds = %land.rhs286, %land.end250
745745 %234 = phi i1 [ false, %land.end250 ], [ %cmp287, %land.rhs286 ]
746746 %land.ext290 = zext i1 %234 to i32
747 %call291 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str4, i32 0, i32 0), double %ret_dc.real268, double %ret_dc.imag271, double %lret_dc.real272, double %lret_dc.imag275, double %conv276, double %conv277, i32 %land.ext290)
747 %call291 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str4, i32 0, i32 0), double %ret_dc.real268, double %ret_dc.imag271, double %lret_dc.real272, double %lret_dc.imag275, double %conv276, double %conv277, i32 %land.ext290)
748748 %235 = load i32, i32* %retval
749749 ret i32 %235
750750 }
6969 store float %call, float* @x, align 4
7070 %1 = load float, float* @x, align 4
7171 %conv = fpext float %1 to double
72 %call1 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), double %conv)
72 %call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), double %conv)
7373 %2 = load double ()*, double ()** @ptrdv, align 4
7474 %call2 = call double %2()
7575 store double %call2, double* @xd, align 8
7676 %3 = load double, double* @xd, align 8
77 %call3 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), double %3)
77 %call3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), double %3)
7878 %4 = load { float, float } ()*, { float, float } ()** @ptrscv, align 4
7979 %call4 = call { float, float } %4()
8080 %5 = extractvalue { float, float } %call4, 0
8989 %xy.imag8 = load float, float* getelementptr inbounds ({ float, float }, { float, float }* @xy, i32 0, i32 1)
9090 %conv9 = fpext float %xy.real7 to double
9191 %conv10 = fpext float %xy.imag8 to double
92 %call11 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str1, i32 0, i32 0), double %conv5, double %conv10)
92 %call11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str1, i32 0, i32 0), double %conv5, double %conv10)
9393 %7 = load { double, double } ()*, { double, double } ()** @ptrdcv, align 4
9494 %call12 = call { double, double } %7()
9595 %8 = extractvalue { double, double } %call12, 0
100100 %xyd.imag = load double, double* getelementptr inbounds ({ double, double }, { double, double }* @xyd, i32 0, i32 1)
101101 %xyd.real13 = load double, double* getelementptr inbounds ({ double, double }, { double, double }* @xyd, i32 0, i32 0)
102102 %xyd.imag14 = load double, double* getelementptr inbounds ({ double, double }, { double, double }* @xyd, i32 0, i32 1)
103 %call15 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str1, i32 0, i32 0), double %xyd.real, double %xyd.imag14)
103 %call15 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str1, i32 0, i32 0), double %xyd.real, double %xyd.imag14)
104104 ret i32 0
105105 }
106106
33
44 define i32 @main() nounwind {
55 entry:
6 %call = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i32 1075344593) nounwind
6 %call = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i32 1075344593) nounwind
77 ; 16: lw ${{[0-9]+}}, 1f
88 ; 16: b 2f
99 ; 16: .align 2
1010 ; 16: 1: .word 1075344593
1111 ; 16: 2:
1212
13 %call1 = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i32 -1075344593) nounwind
13 %call1 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i32 -1075344593) nounwind
1414
1515 ; 16: lw ${{[0-9]+}}, 1f
1616 ; 16: b 2f
2020
2121 if.then: ; preds = %entry
2222 %tmp1 = load void (...)*, void (...)** @caller.sf1, align 4
23 tail call void (...)* %tmp1() nounwind
23 tail call void (...) %tmp1() nounwind
2424 br label %if.end
2525
2626 if.end: ; preds = %entry, %if.then
3737
3838 define internal void @sf2() nounwind {
3939 entry:
40 %call = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0)) nounwind
40 %call = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0)) nounwind
4141 ret void
4242 }
4343
4545
4646 define internal fastcc void @f2() nounwind noinline {
4747 entry:
48 %call = tail call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0)) nounwind
48 %call = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0)) nounwind
4949 ret void
5050 }
5151
1010 %conv = sext i8 %0 to i32
1111 store i32 %conv, i32* %i, align 4
1212 %1 = load i32, i32* %i, align 4
13 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i32 0, i32 0), i32 %1)
13 %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i32 0, i32 0), i32 %1)
1414 ret i32 0
1515 }
1616
1111 store i32 %conv, i32* %i, align 4
1212 %1 = load i8, i8* @c, align 1
1313 %conv1 = zext i8 %1 to i32
14 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i32 0, i32 0), i32 %conv1)
14 %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i32 0, i32 0), i32 %conv1)
1515 ret i32 0
1616 }
1717
1010 ; 16: lh ${{[0-9]+}}, 0(${{[0-9]+}})
1111 store i32 %conv, i32* %i, align 4
1212 %1 = load i32, i32* %i, align 4
13 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i32 0, i32 0), i32 %1)
13 %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i32 0, i32 0), i32 %1)
1414 ret i32 0
1515 }
1616
1111 ; 16: lhu ${{[0-9]+}}, 0(${{[0-9]+}})
1212 store i32 %conv, i32* %i, align 4
1313 %1 = load i32, i32* %i, align 4
14 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i32 0, i32 0), i32 %1)
14 %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i32 0, i32 0), i32 %1)
1515 ret i32 0
1616 }
1717
1616 br label %y
1717
1818 y: ; preds = %z
19 %call1 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0))
19 %call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0))
2020 br label %z
2121
2222 return: ; No predecessors!
99 entry:
1010 %0 = load i32, i32* @x, align 4
1111 %addiu1 = add i32 %0, -7
12 %call1 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds
12 %call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds
1313 ([7 x i8], [7 x i8]* @.str, i32 0, i32 0), i32 %addiu1)
1414
1515 %1 = load i32, i32* @y, align 4
1616 %addiu2 = add i32 %1, 55
17 %call2 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds
17 %call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds
1818 ([7 x i8], [7 x i8]* @.str, i32 0, i32 0), i32 %addiu2)
1919
2020 %2 = load i32, i32* @z, align 4
2121 %addiu3 = add i32 %2, 24
22 %call3 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds
22 %call3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds
2323 ([7 x i8], [7 x i8]* @.str, i32 0, i32 0), i32 %addiu3)
2424 ret i32 0
2525 }
88 entry:
99 %0 = load i32, i32* @x, align 4
1010 %and1 = and i32 %0, 4
11 %call1 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds
11 %call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds
1212 ([7 x i8], [7 x i8]* @.str, i32 0, i32 0), i32 %and1)
1313
1414 %1 = load i32, i32* @y, align 4
1515 %and2 = and i32 %1, 5
16 %call2 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds
16 %call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds
1717 ([7 x i8], [7 x i8]* @.str, i32 0, i32 0), i32 %and2)
1818 ret i32 0
1919 }
2727 store float %add, float* @f, align 4
2828 %2 = load float, float* @f, align 4
2929 %conv = fpext float %2 to double
30 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0), double %conv)
30 %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0), double %conv)
3131 ret void
3232 }
3333
4848 entry:
4949 call void @foo()
5050 %0 = load i32, i32* @i, align 4
51 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str1, i32 0, i32 0), i32 %0)
51 %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str1, i32 0, i32 0), i32 %0)
5252 call void @nofoo()
5353 %1 = load i32, i32* @i, align 4
54 %call1 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str2, i32 0, i32 0), i32 %1)
54 %call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str2, i32 0, i32 0), i32 %1)
5555 ret i32 0
5656 }
5757
1515 %ehselector.slot = alloca i32
1616 %e = alloca i32, align 4
1717 store i32 0, i32* %retval
18 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i32 0, i32 0))
18 %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i32 0, i32 0))
1919 %exception = call i8* @__cxa_allocate_exception(i32 4) nounwind
2020 %0 = bitcast i8* %exception to i32*
2121 store i32 20, i32* %0
77 %0 = load i32, i32* @i, align 4
88 %sub = sub nsw i32 0, %0
99 ; 16: neg ${{[0-9]+}}, ${{[0-9]+}}
10 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i32 0, i32 0), i32 %sub)
10 %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i32 0, i32 0), i32 %sub)
1111 ret i32 0
1212 }
1313
88 %0 = load i32, i32* @x, align 4
99 %neg = xor i32 %0, -1
1010 ; 16: not ${{[0-9]+}}, ${{[0-9]+}}
11 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i32 0, i32 0), i32 %neg)
11 %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i32 0, i32 0), i32 %neg)
1212 ret i32 0
1313 }
1414
99 %1 = load i32, i32* @y, align 4
1010 %or = or i32 %0, %1
1111 ; 16: or ${{[0-9]+}}, ${{[0-9]+}}
12 %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i32 0, i32 0), i32 %or)
12 %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i32 0, i32 0), i32 %or)
1313 ret i32 0
1414 }
1515