Commit 8ba6114a authored by Tanya Lattner's avatar Tanya Lattner
Browse files

Merge from mainline.

llvm-svn: 58032
parent 9768c466
Loading
Loading
Loading
Loading
+22 −8
Original line number Diff line number Diff line
@@ -905,11 +905,13 @@ void SelectionDAGLowering::visitRet(ReturnInst &I) {
  SmallVector<SDValue, 8> NewValues;
  NewValues.push_back(getControlRoot());
  for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i) {  
    SDValue RetOp = getValue(I.getOperand(i));

    SmallVector<MVT, 4> ValueVTs;
    ComputeValueVTs(TLI, I.getOperand(i)->getType(), ValueVTs);
    for (unsigned j = 0, f = ValueVTs.size(); j != f; ++j) {
    unsigned NumValues = ValueVTs.size();
    if (NumValues == 0) continue;

    SDValue RetOp = getValue(I.getOperand(i));
    for (unsigned j = 0, f = NumValues; j != f; ++j) {
      MVT VT = ValueVTs[j];

      // FIXME: C calling convention requires the return type to be promoted to
@@ -2195,11 +2197,23 @@ void SelectionDAGLowering::visitVFCmp(User &I) {
}

void SelectionDAGLowering::visitSelect(User &I) {
  SmallVector<MVT, 4> ValueVTs;
  ComputeValueVTs(TLI, I.getType(), ValueVTs);
  unsigned NumValues = ValueVTs.size();
  if (NumValues != 0) {
    SmallVector<SDValue, 4> Values(NumValues);
    SDValue Cond     = getValue(I.getOperand(0));
    SDValue TrueVal  = getValue(I.getOperand(1));
    SDValue FalseVal = getValue(I.getOperand(2));
  setValue(&I, DAG.getNode(ISD::SELECT, TrueVal.getValueType(), Cond,
                           TrueVal, FalseVal));

    for (unsigned i = 0; i != NumValues; ++i)
      Values[i] = DAG.getNode(ISD::SELECT, TrueVal.getValueType(), Cond,
                              SDValue(TrueVal.getNode(), TrueVal.getResNo() + i),
                              SDValue(FalseVal.getNode(), FalseVal.getResNo() + i));

    setValue(&I, DAG.getMergeValues(DAG.getVTList(&ValueVTs[0], NumValues),
                                    &Values[0], NumValues));
  }
}


+24 −0
Original line number Diff line number Diff line
; RUN: llvm-as < %s | llc
; PR2924

target datalayout =
"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32"
target triple = "i686-pc-linux-gnu"

define x86_stdcallcc { i32, i8* } @_D3std6string7toupperFAaZAa({ i32, i8* } %s) {
entry_std.string.toupper:
        %tmp58 = load i32* null
        %tmp59 = icmp eq i32 %tmp58, 0
        %r.val = load { i32, i8* }* null, align 8
        %condtmp.0 = select i1 %tmp59, { i32, i8* } undef, { i32, i8* } %r.val 

        ret { i32, i8* } %condtmp.0
}
define { } @empty({ } %s) {
entry_std.string.toupper:
        %tmp58 = load i32* null
        %tmp59 = icmp eq i32 %tmp58, 0
        %r.val = load { }* null, align 8
        %condtmp.0 = select i1 %tmp59, { } undef, { } %r.val
        ret { } %condtmp.0
}