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 | |
| 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')
| -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!"); } |

