Anton Korobeynikov | 39784e1 | 2010-01-04 10:31:54 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s |
| 2 | target datalayout = "E-p:64:64:64-i8:8:16-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-a0:16:16-n32:64" |
| 3 | target triple = "s390x-elf" |
| 4 | |
| 5 | @REGISTER = external global [10 x i32] ; <[10 x i32]*> [#uses=2] |
| 6 | |
| 7 | define void @DIVR_P(i32 signext %PRINT_EFFECT) nounwind { |
| 8 | entry: |
| 9 | %REG1 = alloca i32, align 4 ; <i32*> [#uses=2] |
| 10 | %REG2 = alloca i32, align 4 ; <i32*> [#uses=2] |
| 11 | %call = call signext i32 (...)* @FORMAT2(i32* %REG1, i32* %REG2) nounwind ; <i32> [#uses=0] |
| 12 | %tmp = load i32* %REG1 ; <i32> [#uses=1] |
| 13 | %idxprom = sext i32 %tmp to i64 ; <i64> [#uses=1] |
| 14 | %arrayidx = getelementptr inbounds [10 x i32]* @REGISTER, i64 0, i64 %idxprom ; <i32*> [#uses=2] |
| 15 | %tmp1 = load i32* %arrayidx ; <i32> [#uses=2] |
| 16 | %tmp2 = load i32* %REG2 ; <i32> [#uses=1] |
| 17 | %idxprom3 = sext i32 %tmp2 to i64 ; <i64> [#uses=1] |
| 18 | %arrayidx4 = getelementptr inbounds [10 x i32]* @REGISTER, i64 0, i64 %idxprom3 ; <i32*> [#uses=3] |
| 19 | %tmp5 = load i32* %arrayidx4 ; <i32> [#uses=3] |
| 20 | %cmp6 = icmp sgt i32 %tmp5, 8388607 ; <i1> [#uses=1] |
| 21 | %REG2_SIGN.0 = select i1 %cmp6, i32 -1, i32 1 ; <i32> [#uses=2] |
| 22 | %cmp10 = icmp eq i32 %REG2_SIGN.0, 1 ; <i1> [#uses=1] |
| 23 | %not.cmp = icmp slt i32 %tmp1, 8388608 ; <i1> [#uses=2] |
| 24 | %or.cond = and i1 %cmp10, %not.cmp ; <i1> [#uses=1] |
| 25 | br i1 %or.cond, label %if.then13, label %if.end25 |
| 26 | |
| 27 | if.then13: ; preds = %entry |
| 28 | %div = sdiv i32 %tmp5, %tmp1 ; <i32> [#uses=2] |
| 29 | store i32 %div, i32* %arrayidx4 |
| 30 | br label %if.end25 |
| 31 | |
| 32 | if.end25: ; preds = %if.then13, %entry |
| 33 | %tmp35 = phi i32 [ %div, %if.then13 ], [ %tmp5, %entry ] ; <i32> [#uses=1] |
| 34 | %cmp27 = icmp eq i32 %REG2_SIGN.0, -1 ; <i1> [#uses=1] |
| 35 | %or.cond46 = and i1 %cmp27, %not.cmp ; <i1> [#uses=1] |
| 36 | br i1 %or.cond46, label %if.then31, label %if.end45 |
| 37 | |
| 38 | if.then31: ; preds = %if.end25 |
| 39 | %sub = sub i32 16777216, %tmp35 ; <i32> [#uses=1] |
| 40 | %tmp39 = load i32* %arrayidx ; <i32> [#uses=1] |
| 41 | %div40 = udiv i32 %sub, %tmp39 ; <i32> [#uses=1] |
| 42 | %sub41 = sub i32 16777216, %div40 ; <i32> [#uses=1] |
| 43 | store i32 %sub41, i32* %arrayidx4 |
| 44 | ret void |
| 45 | |
| 46 | if.end45: ; preds = %if.end25 |
| 47 | ret void |
| 48 | } |
| 49 | |
| 50 | declare signext i32 @FORMAT2(...) |