diff options
| author | Brian Gaeke <gaeke@uiuc.edu> | 2003-07-18 20:23:43 +0000 | 
|---|---|---|
| committer | Brian Gaeke <gaeke@uiuc.edu> | 2003-07-18 20:23:43 +0000 | 
| commit | 26bb3c1df65661ae447d0d48d53ef1ecf05b6f1c (patch) | |
| tree | 1f53b602c31432c8623f831a9d05e1f3b026cd3b /llvm/lib | |
| parent | 1f6feb7bf4baa25dd9bb1a59a822476fdffea0c9 (diff) | |
| download | bcm5719-llvm-26bb3c1df65661ae447d0d48d53ef1ecf05b6f1c.tar.gz bcm5719-llvm-26bb3c1df65661ae447d0d48d53ef1ecf05b6f1c.zip  | |
Please, save your applause^H^H^H^H^H^H^H^Hflames for the end...
Avoid a fall-through in the (stubby) treatment of the longjmp intrinsic
call which causes llc & lli to core-dump.
Add a sort-of treatment of cast double to ulong. I am not really sure
what a user should expect to see upon casting a negative FP value to
unsigned long long. But with what is given here, I was able to write
a program that could cast -123.456 to ulong and back and get -123.0,
which seems like a step in the right direction.  GCC seems to give you
0. I don't know if I'd consider that useful.
These cases were coming up in GNU coreutils-5.0.
llvm-svn: 7205
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/InstSelectSimple.cpp | 9 | 
1 files changed, 6 insertions, 3 deletions
diff --git a/llvm/lib/Target/X86/InstSelectSimple.cpp b/llvm/lib/Target/X86/InstSelectSimple.cpp index 9474942d2a0..ec8313eda42 100644 --- a/llvm/lib/Target/X86/InstSelectSimple.cpp +++ b/llvm/lib/Target/X86/InstSelectSimple.cpp @@ -980,6 +980,8 @@ void ISel::visitIntrinsicCall(LLVMIntrinsic::ID ID, CallInst &CI) {    case LLVMIntrinsic::longjmp:      BuildMI(X86::CALLpcrel32, 1).addExternalSymbol("abort", true);  +    return; +    case LLVMIntrinsic::setjmp:      // Setjmp always returns zero...      BuildMI(BB, X86::MOVir32, 1, getReg(CI)).addZImm(0); @@ -1814,9 +1816,10 @@ void ISel::emitCastOperation(MachineBasicBlock *BB,        case cByte:  StoreTy = Type::ShortTy; StoreClass = cShort; break;        case cShort: StoreTy = Type::IntTy;   StoreClass = cInt;   break;        case cInt:   StoreTy = Type::LongTy;  StoreClass = cLong;  break; -      case cLong: -        assert(0 &&"FIXME not implemented: cast FP to unsigned long long"); -        abort(); +      // The following treatment of cLong may not be perfectly right, +      // but it survives chains of casts of the form +      // double->ulong->double. +      case cLong:  StoreTy = Type::LongTy;  StoreClass = cLong;  break;        default: assert(0 && "Unknown store class!");        }  | 

